PHP包含相对路径

新手上路,请多包涵

我有文件/root/update/test.php。还有一个文件,/root/connect.php;这个文件有一行

include "../config.php";

在 /root/update/test.php 中。有代码

set_include_path(".:/root");
include "connect.php";

当我运行 /root/update/test.php 时,它找到了 connect.php,但找不到 config.php,给了我

PHP Warning:  include(../config.php): failed to open stream: No such file or directory in /root/connect.php on line 2
PHP Warning:  include(): Failed opening '../config.php' for inclusion (include_path='.:/root')

这让我感到困惑,因为这些警告让我看起来一切都正确 - 包含路径是 /root,它正在寻找存在的文件 ../config.php (/config.php)。有人可以帮我解决这个问题吗?请注意,由于部署到我无权访问的生产服务器,因此我不能选择使用绝对路径。

Ubuntu/阿帕奇

原文由 George B 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 411
2 个回答

您始终可以使用 __DIR__ 包含它:

 include(dirname(__DIR__).'/config.php');

__DIR__ 是一个“ 魔法常数”,返回当前文件的目录,不带斜杠。它实际上是一个绝对路径,您只需要将文件名连接到 __DIR__ 。在这种情况下,由于我们需要提升目录,我们使用 PHP 的 dirname 来提升文件树,从这里我们可以访问 config.php

您也可以在此方法中设置根路径:

 define('ROOT_PATH', dirname(__DIR__) . '/');

在 test.php 中会将您的根设置为 /root/ 级别。

 include(ROOT_PATH.'config.php');

然后应该努力从您想要的位置包含配置文件。

原文由 meiamsome 发布,翻译遵循 CC BY-SA 4.0 许可协议

虽然我感谢您相信绝对路径不是一个选项,但它 比相对路径和更新 PHP 包含路径更好的选择。

使用绝对路径和可以根据环境设置的常量。

 if (is_production()) {
    define('ROOT_PATH', '/some/production/path');
}
else {
    define('ROOT_PATH', '/root');
}

include ROOT_PATH . '/connect.php';

如评论所述, ROOT_PATH 也可以从当前路径派生, $_SERVER['DOCUMENT_ROOT'] 等。

原文由 Jason McCreary 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏