【发布时间】:2019-02-16 21:29:57
【问题描述】:
工作目录:
rootDir
dir1
file1.php
dir2
file2.php
main.php
main 需要 file1,而 file1 需要 file2。 Main 可以要求 file1 没有问题。但是 file1 不能要求 file2。我最初尝试要求 file2(在 file1 中):
require_once '../dir2/file2.php';
当我访问 main.php 时,我只得到一个白页,没有任何东西被发送到客户端。所以我试着捕捉一个异常:
try {
require_once '../dir2/file2.php';
echo "Succesfully required file";
} catch (Exception $e) {
echo $e->getMessage();
}
这也会导致白屏。不显示错误消息,不写入回显。 我发现需要file2的唯一方法:
$root = realpath($_SERVER['DOCUMENT_ROOT']);
require_once "{$root}/rootDir/dir2/file2.php";
为什么 '../' 不起作用?
编辑:
更好的解决方案是(感谢:@Ulrich Eckhardt 和 @Paulpro)
require_once __DIR__ . '/../dir2/file2.php';
【问题讨论】:
-
我可能错了,但这是相对于 main.
require_once可以视为所需文件的复制/粘贴。然后,file1 中的一些相对路径将相对于 main,因此找不到文件 -
如果你
echo $_SERVER['DOCUMENT_ROOT']是什么结果? -
@alex55132 它返回 /var/www/html rootDir 在 /var/www/html/rootDir
-
路径是相对于入口点
main.php而不是file1.php;这意味着如果file1.php可能包含在不同目录中的入口点中,则相对路径将不起作用。您应该使用 __DIR__ 指定相对于 file1 所在目录的路径,如下所示:require_once __DIR__ . '/../dir2/file2.php';
标签: php