2012-09-28 49 views
3

我正在構建一個系統來創建範圍從幾個Kb到50Mb左右的文件,而這個問題比其他任何事情都更讓人好奇。我在網上找不到任何答案。PHP fopen()內存效率和使用

如果我使用

$handle=fopen($file,'w'); 

存儲在$處理,我打電話

fclose($handle); 

過嗎?它存儲在系統的內存中,還是存儲在某個臨時文件中?

其次,我使用一個循環,同時需要1024個字節的數據建立文件,每一次的寫入數據:

fwrite($handle, $content); 

然後調用

fclose($handle); 

當循環完成並寫入所有數據。但是,如果使用循環,效率會更高,還是內存更好?

$handle = fopen($file, 'a'); 
fwrite($handle, $content); 
fclose($handle); 

回答

4

在PHP術語,fopen()(以及許多其他功能)返回一個resource。所以$handle是引用與您的$file相關聯的文件句柄的資源。

Resources是內存中的對象,它們不會被PHP保存到文件系統中。

您目前的方法是兩種方法中效率更高的方法。一次又一次打開,寫入,然後關閉同一文件的效率低於只打開一次,多次寫入並關閉它的效率。打開和關閉文件需要設置輸入和輸出緩衝區並分配其他內部資源,這些操作相對昂貴。這是一個很糟糕的比喻,但是如果你每次遇到停車標誌都會關掉汽車的發動機。

+1

不要停止停止跡象:問題解決了。 – moonwave99

+0

完美,非常感謝你的信息。 – whizzkid

1

您的文件句柄只是另一個內存引用,並且像其他程序變量和資源一樣存儲在堆棧內存中。另外就文件I/O而言,打開和關閉一次,並根據需要多次寫入 - 這是最有效的方式。

$handle = fopen($file, 'a'); //open once 
while(condition){ 
    fwrite($handle, $content); //write many 
} 
fclose($handle); //close once 
0
  1. 根據PHP DOCS fopen()函數創建了一個流,其是一個File handle。它與文件系統中的文件相關聯。

  2. 創建新的File handle每次你需要寫另一個1024字節會非常慢。