18

包括 WordPress 在内的许多著名的 PHP 脚本都在使用dirname(__FILE__).'/myParent.php',而不仅仅是'myParent.php'在当前运行的脚本的同一目录中包含文件时。

他们不是一样的吗?为什么你更喜欢打字?

谢谢。

4

4 回答 4

18

PHP 需要知道文件的绝对路径。dirname(__FILE__).'/myParent.php'已经是绝对路径,但'myParent.php'需要使用include_path中的给定路径进行查找以获取绝对路径并找到文件。更好的选择是'./myParent.php'

include './file'但是,显式使用比让 PHP 总是检查每个包含的当前目录更有效。

于 2010-02-08T09:03:45.913 回答
14

除了提高性能(在大多数情况下这可能是预优化*)之外,它还可以防止环境的 PHP 配置没有将当前目录 ( .) 作为包含路径的一部分的(非常奇怪的)场景。

include*使用需要include_path查找的路径与不需要查找的相对路径的基准。每次测试超过 100000 次迭代

结果

include("include.php"):   8.3664200305939s
include("./include.php"): 8.3511519432068s

(8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s

除非您包含数百或数千个文件,否则 0.0000001s 最多可以忽略不计。

测试代码

define("MAX", 100000);

ob_start();
$i = MAX;
$_t = microtime(true);
do {
    include("include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();

echo "include(\"include.php\"):  {$_t}s\n";

ob_start();
$i = MAX;
$_t = microtime(true);
do {
    include("./include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();

测试在 2.16GHz Macbook 10.5.8 和 PHP 版本 5.2.9(www.entropy.ch Release 7)上进行

于 2010-02-08T09:47:32.343 回答
12

使用 dirname + 文件名稍微快一些,因为 PHP 不会遍历include_path搜索文件。如果速度很重要,您可能会输入更多。

于 2010-02-08T09:08:00.940 回答
8

关于 include('./file.php') 的附加说明。

如果只有速度很重要,那么可以使用 include('./file.php'),但如果要解决依赖关系和相对路径问题,最好使用 dirname(__ FILE __),因为

include('./file.php')

仍将构建相对于执行脚本(包括脚本)的路径,而

include(dirname(__FILE__).'/file.php');

将解析相对于该行所在的当前脚本(包含的脚本)的路径。

通常,您最好使用 dirname(__ FILE __ ),因为 './' 只会带来可忽略不计的性能提升,而 dirname(__ FILE __ ) 会为您提供更可靠的包含。

/编辑:还要注意,上面完成的基准测试只关注include('./something.php'),这确实比include('something.php')因为你没有 include_path 行走要快,但是当你使用时,dirname(__FILE__)你会得到dirname()函数调用开销,这使得它比行走 include_path 慢(除非你在您的 include_path 中有很多路径)。

于 2012-08-26T11:50:19.800 回答