假设当前工作目录是/home/james/, 子目录与文件的结构如下:

bin/php/run.php的代码如下:

require_once 'pub.php';
echo pub_info() . "\n";

pub.php的代码如下:

function pub_info() {
return 'Public function v 1';
}

bin/php/pub.php的代码如下:

function pub_info() {
return 'Public function v 2';
}

两个pub.php都定义了同一个函数,现在运行:

php bin/php/run.php

输入是将是: Public function v 1,说明require_once加载的是最外面的pub.php。

如果将最外面的pub.php删除,再运行php bin/php/run.php,则会输出: Public function v 2。

现在将bin/php/run.php的内容改为:

require_once './pub.php';
echo pub_info() . "\n";

注意到只是在require_once中加了”./”, 现在如果删除最外层的pub.php将出到Fatal Error, 因为无法找到”./pub.php”。

总结

以CLI运行时,require/require_once/include/include_once的是相对路径,但没有加”./”,刚优先查找当前工作目录,然后是被运行脚本所在目录。但是如果相对路径前面加了”./”,则只会查找当前工作目录。