dat*_*.io 17 php require include
包括WordPress在内的许多着名的PHP脚本都使用dirname(__FILE__).'/myParent.php'而不是仅仅'myParent.php'将文件包含在当前运行的脚本的同一目录中.
他们不是一回事吗?为什么你更喜欢打字?
谢谢.
Gum*_*mbo 18
PHP需要知道文件的绝对路径.dirname(__FILE__).'/myParent.php'已经是绝对路径但'myParent.php'需要使用include_path中的给定路径进行查找以获取绝对路径并找到该文件.更好的选择是'./myParent.php':
但是,明确使用它
include './file'比使用PHP始终检查每个包含的当前目录更有效.
Jus*_*son 14
除了性能提升(在大多数情况下可能是预优化*)之外,它还可以防止环境的PHP配置没有当前目录(.)作为包含路径的一部分的(非常奇怪的)场景.
*include使用需要include_path查找的路径与不使用查找的相对路径的基准.每个测试超过100000次迭代
结果
include("include.php"): 8.3664200305939s
include("./include.php"): 8.3511519432068s
(8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s
Run Code Online (Sandbox Code Playgroud)
除非您包含数百或数千个文件,否则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();
Run Code Online (Sandbox Code Playgroud)
测试在2.16GHz Macbook 10.5.8上进行,PHP版本为5.2.9(www.entropy.ch Release 7)
关于include('./ file.php')的补充说明.
如果只有速度很重要,那么你可以使用include('./ file.php'),但是如果你想解决依赖关系和相对路径问题,你最好使用dirname(__ FILE __),因为
include('./file.php')
Run Code Online (Sandbox Code Playgroud)
仍然会构建相对于执行脚本(包括脚本)的路径
include(dirname(__FILE__).'/file.php');
Run Code Online (Sandbox Code Playgroud)
将解析相对于此行所在的当前脚本的路径(包含的脚本).
通常,你最好使用dirname(__ FILE __),因为'./'只能提供可忽略的性能提升,而dirname(__ FILE __)可以提供更多可靠的包含.
/编辑:还要注意上面做的基准测试只关注include('./something.php'),这确实比include('something.php')你没有include_path行走更快,但是当你使用时dirname(__FILE__)你得到dirname()函数调用开销,这使得它比走include_path慢(除非你你的include_path中有很多路径).