2011-09-06 103 views
2

提供了以下示例代码文件: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,我在sometestfile_new上面填满2, 我在Linux上运行这个,这是inode相关吗? 如果在每个循环之后添加rewind(),则会在覆盖时间点之后读取新文件。

回答

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()做任何事情,你只是不能重读源代码并继续打印它。

+0

感谢您的回答,您是否知道fopen会缓存文件的文档资源?就像我说的使用rewind()会将读取过程打开到新文件。 这也可能与此有关:stream_set_read_buffer(),但该函数仅从5.3.3 –

+0

开始引入,不需要记录。只要fopen读取一个文件,假设'$ file = fopen('file.txt','a')'',那个变量就会有''file.txt''的内容,所以它不会在发生''fopen()'后会发生什么情况,变量将拥有内容,直到解析脚本。 –