PHP filesize()显示windows共享(网络)文件夹内文件的旧文件大小。

问题描述 投票:2回答:1

我有以下的脚本,运行它可以从一个文件中读取新的内容。

<?php
clearstatcache();
$fileURL = "\\\\saturn\extern\seq_ws.csv";
$fileAvailable = file_exists($fileURL);
$bytesRead = file_get_contents("bytes.txt");

if($fileAvailable){
    $fileSize = filesize($fileURL);
    //Statusses 1 = Partial read, 2 = Complete read, 0 = No read, -1 File not found. followed by !!
    if($bytesRead < $fileSize){
        //$bytesRead till $fileSize bytes read from file.
        $content = file_get_contents($fileURL, NULL, NULL, $bytesRead);
        file_put_contents("bytes.txt", ((int)$bytesRead + strlen($content)));
        echo "1!!$content";
    }else if($bytesRead > $fileSize){
        //File edit or delete detected, whole file read again.
        $content = file_get_contents($fileURL);
        file_put_contents("bytes.txt", strlen($content));
        echo "2!!$content";
    }else if($bytesRead == $fileSize){
        //No new data found, no action taken.
        echo "0!!";
    }
}else{
    //File delete detected, reading whole file when available
    echo "-1!!";
    file_put_contents("bytes.txt", "0");
}
?>

当我运行它的时候,它的工作非常完美,并且符合预期。当我从同一台电脑和我的服务器上编辑文件时,它立即工作并返回正确的值。然而,当我从另一台电脑上编辑文件时,我的脚本需要大约4-6秒的时间来读取文件的正确文件大小。

我添加了 clearstatcache(); 因为我认为是缓存的问题。但奇怪的是,当我在服务器电脑上修改文件时,它能立即响应,但在另一台电脑上却没有。

最重要的是,当另一台电脑修改文件时,我在Windows中看到文件的变化,并显示出 filesize 和内容,但由于某些原因,Apache需要4-6秒的时间才能检测到变化。在这4-6秒内,它收到了旧的 filesize 从改变之前。

所以我有以下问题。

  1. 是否... filesize 信息缓存在Apache服务器或Windows内部的任何地方?
  2. 如果问题1适用,有什么办法可以删除或禁用这种缓存?
  3. 有没有可能这不是一个缓存问题?
php apache file-get-contents filesize
1个回答
0
投票

我想在你的本地电脑中,php有开发设置。

所以我建议检查一下php.ini中的 该参数: realpath_cache_ttl

哪一个是:

realpath_cache_ttl integer

缓存特定文件或目录的真实路径信息的时间(秒)。 对于很少改变文件的系统,可以考虑增加这个值。

为了测试它,php info在本地和服务器上都可以检查这个值。

<?php phpinfo();
© www.soinside.com 2019 - 2024. All rights reserved.