提供以下示例代码:
<?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(),则会在覆盖时间点之后读取新文件。
答案 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()
执行任何其他操作,您只是无法重读源并继续打印它。