PHP检查Filesize以查看它是否正在发生变化

时间:2015-12-02 08:51:05

标签: php while-loop filesize

我有一个调用外部进程的网页。此过程将文本文件写入我的服务器上的文件夹中。我无法控制这个外部过程。

我正在尝试监视文件以查看它的文件大小是否会发生变化,这会在写入时发生变化。一旦外部进程停止写入它,文件大小将保持不变。

我认为这样的事情可能有用:

<?php

$old = 0;
$new = 1;

while ($old == $new) {
    $old = filesize ('/http/test/test.txt');
    echo $old;
    sleep(2);
    $new = filesize ('/http/test/test.txt');
    echo $new;
}
echo $old;
echo $new;
echo "done";
?>

但事实并非如此。如何在文件停止增加之前暂停我的脚本?

这里有类似的问题,但我没有看到使用flock()lsof这两个我无法访问的例子。

可以这样做吗?

由于

更新 这似乎有效。

<?php

$old = 0; $new = 1;
$filePath = "/http/test/test.txt";

while ($old != $new) {
    $old = filesize ($filePath);
    clearstatcache();
    sleep(1);
    $new = filesize ($filePath);
    clearstatcache();
}
echo "done";
?>

1 个答案:

答案 0 :(得分:6)

你需要在循环上调用clearstatcache()。

来自http://php.net/manual/en/function.filesize.php

  

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

示例实现(这里我使用修改时间来检查更改,但您可以使用filesize):

$filePath = '/http/test/test.txt';
$timeInSeconds = 2;

if (file_exists($filePath)) {

  $fileModificationUnixTime = filemtime($filePath);

  while (filemtime($filePath) === $fileModificationUnixTime) {
    echo 'No changes found.';
    sleep($timeInSeconds);
    clearstatcache(); // clears the cached result
  }

  echo 'Changes found';
}