当将文件包含在当前运行的脚本的同一目录中时,很多着名的PHP脚本(包括WordPress)都使用dirname(__FILE__).'/myParent.php'
而不是'myParent.php'
。
他们不是一回事吗?为什么你更喜欢打字?
感谢。
答案 0 :(得分:16)
PHP需要知道文件的绝对路径。 dirname(__FILE__).'/myParent.php'
已经是绝对路径,但'myParent.php'
需要使用include_path中的给定路径进行查找以获取绝对路径并找到该文件。更好的选择是'./myParent.php'
:
但是,显式使用
include './file'
比让PHP始终检查每个包含的当前目录更有效。
答案 1 :(得分: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)
答案 2 :(得分:11)
使用dirname +文件名稍快一些,因为PHP不会通过 include_path 搜索该文件。如果速度很重要,您可能会输入更多。
答案 3 :(得分:7)
关于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 include_path慢(除非你的include_path中有很多路径)。