对于 Linux 下包含少量字节的文件,我只需要处理自上次处理以来发生更改的情况。
我通过调用 PHP clearstatcache(); 检查文件是否已更改。 filemtime();
定期。
由于整个文件总是很小,因此删除对 filemtime 的调用并通过将内容与过去的内容进行比较来检查文件更改是否会提高性能?
或者就性能而言,最好的方法是什么。
最佳答案
使用filemtime +clearstatcache
增强@Ben_D的测试:
<?php
$file = 'small_file.html';
$loops = 1000000;
// filesize (fast)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
$file_size = filesize($file);
}
$end_time = microtime(1);
$time_for_file_size = $end_time - $start_time;
// filemtime (fastest)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
$file_mtime = filemtime($file);
}
$end_time = microtime(1);
$time_for_filemtime = $end_time - $start_time;
// filemtime + no cache (fast and reliable)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
clearstatcache();
$file_mtime_nc = filemtime($file);
}
$end_time = microtime(1);
$time_for_filemtime_nc = $end_time - $start_time;
// file_get_contents (slow and reliable)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
$file_contents = file_get_contents($file);
}
$end_time = microtime(1);
$time_for_file_get_contents = $end_time - $start_time;
// output
echo "
<p>Working on file '$file'</p>
<p>Size: $file_size B</p>
<p>last modified timestamp: $file_mtime</p>
<p>file contents: $file_contents</p>
<h1>Profile</h1>
<p>filesize: $time_for_file_size</p>
<p>filemtime: $time_for_filemtime</p>
<p>filemtime + no cache: $time_for_filemtime_nc</p>
<p>file_get_contents: $time_for_file_get_contents</p>";
/* End of file */
关于php - 文件修改时间检查的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850180/