找一个正在改变的文件

时间:2011-09-06 15:17:29

标签: php file file-io buffer fread

提供以下示例代码:

<?php
$handle = fopen("/tmp/test_file/sometestfile", "r");
$contents = '';
while (!feof($handle)) {
    $contents = fread($handle, 10);
    print $contents;
    sleep(1);
}
fclose($handle);
?> 

如果sometestfile(在我的情况下是一个txt文件)在读取循环期间发生了变化,为什么php程序继续从旧文件中读取? 说它充满了1并且我在它上面写了一些测试文件,它充满了2。 我在Linux上运行它,这个inode是否相关? 如果在每次循环后添加rewind(),则会在覆盖时间点之后读取新文件。

1 个答案:

答案 0 :(得分:2)

来自php.net

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

fopen()filename指定的命名资源绑定到流中。

fopen()一旦被称为“缓存”文件并将以您提及的方法输出,例如您的$contents = fread($handle, 10);

您可以删除该文件,它仍将读取该资源,直到完成文件!feof($handle)

您无法对fopen()执行任何其他操作,您只是无法重读源并继续打印它。