我正在用PHP写一个日志文件。
如果距离上次fwrite
只有几秒钟,我希望附加到日志文件中;如果超过10秒,则为新测试,fopen
上下文应为'w'(覆盖)。
这是我的计划:
$ff = '_ax_test.log';
$wm = (time() - filemtime($ff) >= 10) ? 'w': 'a'; //write mode (append or write)
$fp=fopen($ff, $wm);
然而,结果是出乎意料的 - $ wm始终评估> 10,永远。即使是后续的写作也是如此。
作为一项测试,我将文件单独留了几分钟,然后运行这两次,间隔时间为90秒:
$ff = '_ax_test.log';
$tt = time();
$ft = filemtime($ff);
$dd = $tt - $ft;
$wm = ($dd <= 500) ? 'a': 'w'; //write mode (append or write)
$fp=fopen($ff, 'w');
fwrite($fp, 'First write: ' .$wm. ' ('.$dd.' = tt:[' .$tt. '] - ft[' .$ft. '] )' ."\n\r");
fclose($fp);
sleep(6);
$ff = '_ax_test.log';
$tt = time();
$ft = filemtime($ff);
$dd = $tt - $ft;
$wm = ($dd <= 500) ? 'a': 'w'; //write mode (append or write)
$fp=fopen($ff, 'w');
fwrite($fp, 'First write: ' .$wm. ' ('.$dd.' = tt:[' .$tt. '] - ft[' .$ft. '] )' ."\n\r");
fclose($fp);
结果:
First write: a (318 = tt:[1422045622] - ft[1422045304] )
Next write: a (324 = tt:[1422045628] - ft[1422045304] )
---- 90-second delay ----
First write: a (94 = tt:[1422045722] - ft[1422045628] )
Next write: a (100 = tt:[1422045728] - ft[1422045628] )
第一个和第二个fwrit之间恰好有6秒的延迟,但文件上的文件时间似乎没有改变。
我错过了一些明显的东西吗?
答案 0 :(得分:4)
出于性能原因,每次需要有关文件的信息时,不要执行磁盘访问,而是缓存文件详细信息...其中包括该文件的上次修改时间。
如果您需要覆盖此行为,请使用clearstatcache()