代码之家  ›  专栏  ›  技术社区  ›  user81993

为什么在向文件写入部分块时文件修改时间不改变?

php
  •  1
  • user81993  · 技术社区  · 7 年前

    我有这个测试代码:

    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 回复  |  直到 7 年前
        1
  •  1
  •   misorude    7 年前

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

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

    注意:此函数的结果被缓存。见 clearstatcache() 了解更多详细信息。

    推荐文章