代码之家  ›  专栏  ›  技术社区  ›  datasn.io

有什么比只需要(“myparent.php”)更好的要求(dirname(uu file_uuuuu)'/.'myparent.php')?

  •  16
  • datasn.io  · 技术社区  · 16 年前

    很多著名的PHP脚本,包括wordpress的使用 dirname(__FILE__).'/myParent.php' 而不仅仅是 'myParent.php' 在当前运行脚本的同一目录中包含文件时。

    他们不是同一件事吗?为什么你更喜欢打字?

    谢谢。

    4 回复  |  直到 16 年前
        1
  •  16
  •   Gumbo    16 年前

    PHP需要知道文件的绝对路径。 dirname(__FILE__).'/myParent.php' 已经是绝对路径,但是 'myParent.php' 需要使用中的给定路径进行查找 include_path 获取绝对路径并查找文件。更好的选择是 './myParent.php' 以下内容:

    但是,显式使用更有效 include './file' 而不是让php总是检查每个include的当前目录。

        2
  •  14
  •   Justin Johnson    16 年前

    除了性能提高(在大多数情况下,这可能是一个预优化),它还可以防止(非常奇怪)环境的PHP配置没有当前目录的情况发生。( . )作为include路径的一部分。

    *基准 include 使用需要的路径 include_path 查找与不查找的相对路径。每个测试超过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版本7)

        3
  •  11
  •   alexef    16 年前

    使用dirname+文件名的速度稍快,因为php不会迭代 包含路径 正在搜索文件。如果速度很重要,你可能会输入更多。

        4
  •  7
  •   gaborous    13 年前

    关于include(“./file.php”)的附加说明。

    如果速度很重要,那么可以使用include(“..file.php”),但是如果您想解决依赖关系和相对路径问题,最好使用dirname(uuuufile_uuuuuu),因为

    include('./file.php')
    

    仍将构造相对于执行脚本的路径 包括 脚本)

    include(dirname(__FILE__).'/file.php');
    

    将解析与此行所在的当前脚本相关的路径 包括 脚本)。

    一般来说,使用dirname(uuufile uuuuuuuuu)更好,因为“./”只会带来微不足道的性能提升,而dirname(uuufile uuuuuu)则会给您带来更可靠的包括。

    /编辑:还要注意,上面所做的基准只是关注 include('./something.php') 这确实比 include('something.php') 因为你没有包含路径行走,但是当你使用 dirname(__FILE__) 你得到了 dirname() 函数调用开销,这使得它比遍历include_路径慢(除非include_路径中有很多路径)。

    推荐文章