【问题标题】:include an php file with included files包含包含文件的 php 文件
【发布时间】:2011-08-02 09:17:53
【问题描述】:

这是目录结构

  • /global.php
  • /includes/class_bootstrap.php
  • /includes/init.php
  • /plugins/myplugin.php

这是这些文件中的代码

/start.php

require('./includes/class_bootstrap.php');

/includes/class_bootstrap.php

define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));
require_once(CWD . '/includes/init.php');

/plugins/myplugin.php

require_once(dirname(__FILE__).'../global.php');

据我了解,问题出在 class_bootstrap.php 文件中,因为它为 CWD 生成了错误的路径 这是错误:

警告:require_once(C:/wamp/www/vb4/plugins/includes/init.php) [function.require-once]: 无法打开流:第 35 行的 C:/wamp/www/vb4/global.php 中没有这样的文件或目录

如您所见,“C:/wamp/www/vb4/plugins/includes/init.php”路径错误。

主要问题是我只能编辑 myplugin.php 文件其他文件是 CMS 核心文件,不应更改。

我该如何解决这个问题?

【问题讨论】:

    标签: php include


    【解决方案1】:

    如果您需要确定一组脚本的基本路径,您不应该依赖“当前工作目录”。这可以从执行环境更改为执行环境。

    相反,它基于已知路径。

    /includes/class_bootstrap.php 知道它将是基路径所在的下一个目录,因此它可以这样做:

    define('CWD', realpath(dirname(__FILE__) . '/../') );
    

    dirname 获取传递的字符串中给出的目录名称。如果__FILE__ 返回C:/wamp/www/vb4/plugins/includes/class_bootstrap.php,那么dirname 将返回C:/wamp/www/vb4/plugins/includes。然后我们将/../ 附加到它,然后调用realpath,这会将相对的.. 变成一个真实的目录:C:/wamp/www/vb4/plugins

    呼。

    从那时起,CWD 将按照您的预期运行。你可以require_once CWD . '/includes/init.php',它会正确解析为C:/wamp/www/vb4/plugins/includes/init.php

    此外,这可能听起来很愚蠢,但“vb4”可能指的是 vBulletin 4,在这种情况下,您的插件可能已经可以访问它公开的配置信息,包括路径等方便的东西。这可能会使整个练习变得不必要。我故意对 vB 一无所知,否则我会把你指向他们的开发文档。

    【讨论】:

    • /plugins/myplugin.php 文件是单独的文件,我想连接 CMS 函数和变量,包括 global.php
    • 正如我所说——/includes/class_bootstrap.php 中的代码错误。您必须将其更正为 不 使用 getcwd() 以使其正常运行。 getcwd() 不是确定文件路径的可靠方法——正如您所发现的,它可能会更改为意外值。如果该代码不是您的,那就这样吧 - 无论如何都要更改它以使事情正常运行,并向上游代码提供者提交错误报告。 (如果它是 vB,我完全不惊讶他们会做一些......不假思索......这样的事情。)
    • 谢谢查尔斯,是的,我想编辑 class_bootstrap.php 文件,但这对我的插件来说不会是美好的未来,是的,我肯定会报告错误。
    • chdir() 会有所帮助,但我会讨厌它:)
    • 是的,chdir 被归入我的“如果你使用它,可能是错误”功能列表。
    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多