我有一个调用外部进程的网页。此过程将文本文件写入我的服务器上的文件夹中。我无法控制这个外部过程。
我正在尝试监视文件以查看它的文件大小是否会发生变化,这会在写入时发生变化。一旦外部进程停止写入它,文件大小将保持不变。
我认为这样的事情可能有用:
<?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";
?>
答案 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';
}