2011-03-13 28 views
3

如果我編寫fopen($myfile, 'a'),$myfile是一個非常大的文件,服務器是否必須讀取整個文件才能將指針返回到文件末尾?還是它很快找到指向文件結尾的指針,然後返回?PHP中'a'選項的fopen()效率

在相關說明中,當我使用fwrite()時,我認爲它不覆蓋整個文件,對吧?它只是附加的東西?

我基本上想知道fopen()'a'選項和fwrite()是O(1)還是O(n),其中n是預存文件的長度。

+0

操作系統將文件指針定位在最後。它不需要讀取現有內容。 – mario 2011-03-13 19:01:02

+0

謝謝mario! – Tim 2011-03-13 20:29:07

回答

1

不,fopen不需要讀取整個文件只是爲了跳到最後。簡單的尋求就是所需要的。

4

實際的複雜性取決於底層文件系統的複雜性,但PHP本身不會循環或讀取整個文件,它會尋求最終的結果並從那裏開始寫入。當添加更多文件時打開一個文件,它不會被fwrite擦除(你可以輕鬆地嘗試這個來看看它是如何工作的)。

+0

謝謝馬蒂。當我問到fwrite()時,我真的打算詢問它是否重寫整個文件,而不是僅僅在與文件末尾對應的存儲器中寫入內容。我再次試圖瞭解fwrite()的效率如何。但我認爲現在很清楚它不會重寫所有內容。再次感謝您的幫助和快速響應! – Tim 2011-03-13 20:32:00

2

(相關)
請注意,您還可以附加到文件使用file_put_contents代替fopen/fwrite/fclose - 如果你是非常關心速度:

file_put_contents($filename, $data, FILE_APPEND); 

這是多個原子一點,不需要鎖定。

+0

哇,謝謝你的提示!我會嘗試這個的確。 – Tim 2011-03-13 20:32:22