2011-09-06 31 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()'後會發生什麼情況,變量將擁有內容,直到解析腳本。 –