包括 WordPress 在内的许多著名的 PHP 脚本都在使用dirname(__FILE__).'/myParent.php'
,而不仅仅是'myParent.php'
在当前运行的脚本的同一目录中包含文件时。
他们不是一样的吗?为什么你更喜欢打字?
谢谢。
PHP 需要知道文件的绝对路径。dirname(__FILE__).'/myParent.php'
已经是绝对路径,但'myParent.php'
需要使用include_path中的给定路径进行查找以获取绝对路径并找到文件。更好的选择是'./myParent.php'
:
include './file'
但是,显式使用比让 PHP 总是检查每个包含的当前目录更有效。
除了提高性能(在大多数情况下这可能是预优化*)之外,它还可以防止环境的 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)上进行
使用 dirname + 文件名稍微快一些,因为 PHP 不会遍历include_path搜索文件。如果速度很重要,您可能会输入更多。
关于 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 中有很多路径)。