我做了一些测试来比较和测量两种功能的速度。 is_file 似乎比 file_exists 快几倍(我使用10000次迭代)。我想知道PHP或OS是否为这些功能使用了一些缓存,或者是否始终访问HDD?我想不,但我想知道......
我使用了这段代码:
<?php
$time = microtime();
$time = explode(' ', $time);
$begintime = $time[1] + $time[0];
for($i=0;$i<10000;$i++)
file_exists('/Applications/MAMP/htdocs/index.php');
$time = microtime();
$time = explode(" ", $time);
$endtime = $time[1] + $time[0];
$totaltime = ($endtime - $begintime);
echo 'PHP parsed this in ' .$totaltime. ' seconds.</br>';
$time = microtime();
$time = explode(" ", $time);
$begintime = $time[1] + $time[0];
for($i=0;$i<10000;$i++)
is_file('/Applications/MAMP/htdocs/index.php');
$time = microtime();
$time = explode(" ", $time);
$endtime = $time[1] + $time[0];
$totaltime = ($endtime - $begintime);
echo 'PHP parsed this in ' .$totaltime. ' seconds.</br>';
?>
答案 0 :(得分:9)
PHP在stat缓存中缓存is_file()
和file_exists()
。请致电clearstatcache()
清除它。
编辑:
如果有的话,两者应该花费相似的时间,因为它们都调用操作系统的stat()
function,但是一个的结果可以通过PHP(除非你clearstatcache()
)或操作系统缓存为另一个。 Yuliy在下面提到。
答案 1 :(得分:8)
使用stat(),lstat()或any时 其中列出的其他功能 受影响的函数列表(下面),PHP 缓存信息这些功能 返回以提供更快 性能。但是,在某些方面 例如,你可能想要清除 缓存的信息。例如,如果 正在检查相同的文件 在一个脚本中多次, 并且该文件存在危险 在此期间删除或更改 脚本的操作,你可以选择 清除状态缓存。在这些 情况下,你可以使用 clearstatcache()函数清除 PHP缓存的信息 文件。
受影响的功能包括stat(), lstat(),file_exists(),is_writable(), is_readable(),is_executable(), is_file(),is_dir(),is_link(), filectime(),fileatime(),filemtime(), fileinode(),filegroup(),fileowner(), filesize(),filetype()和 fileperms()。
答案 2 :(得分:2)
is_file
和file_exists
是两个不同的功能,可以完成两件不同的事情; file_exists
仅检查文件是否存在,is_file
告诉目标是否是有效文件,(例如)不是目录。
它们不应该用于相同的目标,因此性能比较不能完成(imho)