PHP包含相对路径


PHP include relative path

我有一个文件/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')

这让我很困惑,因为警告让我看起来一切都做得很正确——include路径是/root,它正在查找文件/config.php(/config.php),它已经存在。有人能帮我清理一下吗?请注意,由于部署到我无法访问的生产服务器,使用绝对路径对我来说不是一个选项

Ubuntu/Apache

您可以始终使用__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');

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

虽然我很感激你相信绝对路径不是一个选项,但它是一个比相对路径和更新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']等导出。