Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';require(dirname(uuu FILE)&';/&';&';myParent.php';)比require(';myParent.php';)好吗?_Php_Include_Require - Fatal编程技术网

什么';require(dirname(uuu FILE)&';/&';&';myParent.php';)比require(';myParent.php';)好吗?

什么';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

许多著名的PHP脚本,包括WordPress,在包含当前运行脚本的同一目录中的文件时,都使用
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');