PHP 包含相对路径

问题描述 投票:0回答:2

我有文件/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/阿帕奇

php
2个回答
164
投票

您始终可以使用

__DIR__
:

包含它
include(dirname(__DIR__).'/config.php');

__DIR__
是一个“神奇常量”,返回当前文件的目录,不带尾部斜杠。它实际上是一个绝对路径,你只需要将文件名连接到
__DIR__
即可。在本例中,由于我们需要提升目录,因此我们使用 PHP 的
dirname
来提升文件树,从这里我们可以访问
config.php

您也可以通过此方法设置根路径:

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

在 test.php 中会将您的 root 设置为

/root/
级别。

include(ROOT_PATH.'config.php');

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.