require / require_once“ ../”中断页面加载而不会引发错误

时间:2019-02-16 21:29:58

标签: php

工作目录:

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';

1 个答案:

答案 0 :(得分:1)

我个人不希望相对路径以任何特定方式起作用。问题是,传统上(即在大多数OS功能中),路径是相对于进程的当前工作目录(CWD)解释的,但在这里您可能希望它相对于当前文件的目录起作用。不要使用相对路径,而应使用显式并使用__DIR__指定当前文件的目录:

require_once __DIR__ . '/../dir2/file2.php';