为什么在写入部分数据块时文件修改时间没有改变?

时间:2019-01-16 10:12:40

标签: php

我有以下测试代码:

function create_file($path, $size_b) {
    $f = fopen($path, "w");
    fseek($f, $size_b - 1, SEEK_CUR);
    fwrite($f, "a");
    fclose($f);
}

function write_file_chunk($path, $offset, $chunk) {
    $f = fopen($path, "r+");
    fseek($f, $offset, SEEK_CUR);
    fwrite($f, $chunk);
    fclose($f);
}

$name = "filemtime_test";
create_file($name, 128);
$m1 = filemtime($name);
sleep(1);
write_file_chunk($name, 0, "hey");
$m2 = filemtime($name);
echo $m1 . " " . $m2 . " " . ($m1 === $m2);

部分写入有效,我知道但是似乎并没有改变文件的修改时间,为什么不呢?还有另一种方法可以检测到文件是否以此方式被修改吗?

1 个答案:

答案 0 :(得分:1)

出于性能原因,当在同一脚本实例中多次调用此类文件信息功能时,PHP会缓存此数据。

http://php.net/manual/en/function.filemtime.php

  

注意:此函数的结果将被缓存。有关更多详细信息,请参见clearstatcache()