我需要检查文件是否在指定位置的HDD上($ path。$ file_name)。
is_file()
和file_exists()
函数之间的差异在PHP中使用哪个更好/更快?
答案 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。结果是:
文件存在时:
is_file x 10000 1.5651218891144秒
file_exists x 10000 1.5016479492188秒
is_readable x 10000 3.7882499694824秒
当文件不存在时:
is_file x 10000 0.23920488357544秒
file_exists x 10000 0.22103786468506秒
is_readable x 10000 0.21929788589478秒
编辑:移动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
提供操作缓存优化。