2012-01-14 35 views
0

我正在創建一個將數據存儲在文件中的類,並且需要知道是否可以使用一個文件進行多個讀取/寫入文件句柄?在PHP中,如何通過反覆關閉文件來多次讀取/寫入文件

我已經做了一些實驗,並使用此代碼:

$file_name = 'test.txt'; 
$file = fopen($file_name, 'r+'); 
echo fread($file, filesize($file_name)) . "<hr />"; 
fwrite($file, "|".rand()); 
echo fread($file, filesize($file_name)); 
fclose($file); 

的文件被讀的第一次,寫的作品,但第二FREAD是空白。

使用此代碼:

$file_name = 'test.txt'; 
$file = fopen($file_name, 'r+'); 
echo fread($file, filesize($file_name)) . "<hr />"; 
fwrite($file, "|".rand()); 
fclose($file); 
$file = fopen($file_name, 'r+'); 
echo fread($file, filesize($file_name)); 
fclose($file); 

第二FREAD然後作品,但它不包含被追加到它在FWRITE它上面的數據。所以基本上,我想創建一個單獨的文件句柄作爲類的一個屬性,並讓它在讀寫時引用它,但包括其他方法可能對數據所做的任何更改。

如果這是不可能的,我確實有兩種選擇,一種是在每種方法中打開和關閉文件句柄,但這看起來效率很低,我不確定單個文件打開/關閉「費用」的表現。另一種選擇是數據被轉換爲數組以便於操作,我可以每次都更新數組而不是文件,但是我何時會更新文件?

回答

1

退房fseek在文件中移動鼠標指針,並從那裏讀,FREADFWRITE正在向前推進該指針。

而且你必須使用a+代替r+,請參見:中fopen

+0

好,涼爽的模式 - 現在,第二讀的作品,但它不包括被寫入文件其間類FREAD數據 – ollie 2012-01-14 11:41:35

+1

您必須在中間清除緩存'clearstatcache()',否則對'filesize'的調用將是相同的。 – greut 2012-01-14 11:44:35

+0

完美的作品!非常感謝你的幫助人 – ollie 2012-01-14 11:52:09