PHP文件访问时间未按预期更新

时间:2015-01-23 21:23:51

标签: php

我正在用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秒的延迟,但文件上的文件时间似乎没有改变。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:4)

出于性能原因,每次需要有关文件的信息时,不要执行磁盘访问,而是缓存文件详细信息...其中包括该文件的上次修改时间。

如果您需要覆盖此行为,请使用clearstatcache()