什么';require(dirname(uuu FILE)&';/&';&';myParent.php';)比require(';myParent.php';)好吗?
许多著名的PHP脚本,包括WordPress,在包含当前运行脚本的同一目录中的文件时,都使用什么';require(dirname(uuu FILE)&';/&';&';myParent.php';)比require(';myParent.php';)好吗?,php,include,require,Php,Include,Require,许多著名的PHP脚本,包括WordPress,在包含当前运行脚本的同一目录中的文件时,都使用dirname(\uuuu文件).'/myParent.PHP',而不仅仅是'myParent.PHP' 他们不是一回事吗?你为什么更喜欢打字 谢谢。PHP需要知道文件的绝对路径dirname(_文件).'/myParent.php'已经是绝对路径,但是'myParent.php'需要使用中的给定路径进行查找,以获得绝对路径并查找文件。更好的选择是”./myParent.php': 但是,显式使用incl
dirname(\uuuu文件).'/myParent.PHP'
,而不仅仅是'myParent.PHP'
他们不是一回事吗?你为什么更喜欢打字
谢谢。PHP需要知道文件的绝对路径
dirname(_文件).'/myParent.php'
已经是绝对路径,但是'myParent.php'
需要使用中的给定路径进行查找,以获得绝对路径并查找文件。更好的选择是”./myParent.php'
:
但是,显式使用include./file'
比让PHP始终检查当前目录中的每个include更有效
使用dirname+文件名稍微快一点,因为PHP不会迭代通过include\u路径搜索文件。如果速度很重要,您可能会键入更多的内容。除了性能提高(在大多数情况下可能是预优化*)之外,它还可以防止环境的PHP配置没有当前目录(
)作为包含路径的一部分的(非常奇怪)情况
*使用需要查找的路径与不需要查找的相对路径进行include
的基准测试。每次测试超过100000次迭代
结果
include("include.php"): 8.3664200305939s
include("./include.php"): 8.3511519432068s
(8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s
除非包含数百或数千个文件,否则0.0000001最多只能忽略不计
测试代码
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)关于include('./file.PHP')的附加说明 如果只是速度问题,那么您可以使用include('./file.php'),但是如果您想解决依赖关系和相对路径问题,最好使用dirname(_;file__;),因为
include('./file.php')
仍将构造相对于执行脚本的路径(包括脚本),而
将解析相对于此行所在的当前脚本(包含的脚本)的路径
一般来说,最好使用dirname(\uuuuu文件\uuuu),因为“/”只会带来微不足道的性能提升,而dirname(\uuuuu文件\uuu)则会提供更可靠的include
/编辑:还要注意,上面所做的基准测试只涉及
include('./something.php')
,它确实比include('something.php')
快,因为您没有include\u路径遍历,但是当您使用dirname(\uu FILE\uuu)
时,您会得到dirname()
函数调用开销,这使得它比走include_路径慢(除非在include_路径中有很多路径)。不需要绝对路径,也不一定需要include路径。“如果定义了路径(完整路径或相对路径),则include_路径将被完全忽略。”@Justin Johnson:对于路径,手册可能意味着字符串至少包含一个/
。因此/foo
,foo/bar
,/foo/bar
是路径,而foo
不是。这也适用于myParent.php
。对于这个require dirname(dirname(dirname(_文件__)))。“/out/DBconnection.php”代码>?我想要像/
或这样的东西。有吗?请注意,您应该始终更喜欢使用\uuuuu DIR\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
都是从PHP 4.0.2开始提供的<代码>\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\:4.8651170730591s
162.8%-include(目录名(_文件)“/include.php”):5.1241970062256s
include(dirname(__FILE__).'/file.php');