我需要检查文件是否在指定位置($ path。$ file_name)的HDD上。
is_file()
和file_exists()
函数之间的区别是什么?在PHP中使用哪个更好/更快?
我需要检查文件是否在指定位置($ path。$ file_name)的HDD上。
is_file()
和file_exists()
函数之间的区别是什么?在PHP中使用哪个更好/更快?
Answers:
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_可读x 10000 3.7882499694824秒
当文件不存在时:
is_file x 10000 0.23920488357544秒
file_exists x 10000 0.22103786468506秒
is_可读x 10000 0.21929788589478秒
编辑:移动clearstatcache(); 在循环内。感谢CJ Dennis。
is_file()
比更快file_exists()
。如果您知道它是文件(而不是目录),请绝对使用它。
is_dir()
事实证明file_exists()
它比(快慢)快20%,那么无论如何,如果您仅检查dirs,那将是一个重要的区别……
我知道这篇文章很老,但是这些功能之间的区别不仅在于它们的行为。如果使用is_file()检查大文件是否存在,则超过2个Go。你会感到惊讶。文件不存在。:(但是,如果您使用file_exists()检查,那是可行的。