is_file / file_exists性能和缓存

时间:2010-11-04 16:53:27

标签: php performance

我做了一些测试来比较和测量两种功能的速度。 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>';
?>

3 个答案:

答案 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_filefile_exists是两个不同的功能,可以完成两件不同的事情; file_exists仅检查文件是否存在,is_file告诉目标是否是有效文件,(例如)不是目录。

它们不应该用于相同的目标,因此性能比较不能完成(imho)