PHP中的is_file或file_exists

时间:2009-04-27 09:57:59

标签: php file exists

我需要检查文件是否在指定位置的HDD上($ path。$ file_name)。

is_file()file_exists()函数之间的差异在PHP中使用哪个更好/更快?

5 个答案:

答案 0 :(得分:157)

如果给定路径指向目录,

is_file()将返回false。如果给定路径指向有效文件目录,file_exists()将返回true。所以这完全取决于你的需求。如果您想知道具体是否是文件,请使用is_file()。否则,请使用file_exists()

答案 1 :(得分:33)

is_file()是最快的,但最近的基准显示file_exists()对我来说稍微快一点。所以我想这取决于服务器。

我的测试基准:

benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');

function benchmark($funcName) {
    $numCycles = 10000;
    $time_start = microtime(true);
    for ($i = 0; $i < $numCycles; $i++) {
        clearstatcache();
        $funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "$funcName x $numCycles $time seconds <br>\n";
}

编辑:@Tivie感谢您的评论。将周期数从1000改为10k。结果是:

  1. 文件存在时

    is_file x 10000 1.5651218891144秒

    file_exists x 10000 1.5016479492188秒

    is_readable x 10000 3.7882499694824秒

  2. 当文件不存在时

    is_file x 10000 0.23920488357544秒

    file_exists x 10000 0.22103786468506秒

    is_readable x 10000 0.21929788589478秒

  3. 编辑:移动clearstatcache();在循环内。谢谢CJ丹尼斯。

答案 2 :(得分:2)

都不是。

如果文件不存在,

is_file()可以返回true。

如果文件是目录,

file_exists()可以返回true。

因此,如果它需要是一个文件并且需要存在,那么就需要两者。

此处的速度无关紧要,因为它们并不相同。如果只有一项功能很重要,请只使用一项,这样会更快。

答案 3 :(得分:1)

我知道这篇文章很老,但是这些功能之间的区别不仅在于它们的行为。 如果使用is_file()检查大文件的存在,则超过2个Go。你会感到惊讶。 文件不存在。 :( 但是,如果您使用file_exists()检查,那是可行的。

答案 4 :(得分:0)

如果

is_file与反斜杠\is_file一起使用,将会更快。在这种情况下,PHP将不会file_exists提供操作缓存优化。