2010-07-01 98 views
9

這是我的代碼:PHP - 將fwrite()立即保存文件?

$zplHandle = fopen($target_file,'w'); 
fwrite($zplHandle, $zplBlock01); 
fwrite($zplHandle, $zplBlock02); 
fwrite($zplHandle, $zplBlock03); 
fclose($zplHandle); 

當將文件保存?是在寫完之後還是在關閉之後立即進行的?

我在問這是因爲我有Printfil正在監聽文件夾中的文件並打印新創建的文件。如果PHP在fwrite之後立即提交保存,則可能會遇到Printfil無法捕獲後續寫入的問題。

謝謝你的幫助。

回答

3

我做了一小段代碼來測試它,看來fwrite之後會立即檢測到新內容,而不是fclose之後。

這是我在Linux上的測試。

#!/usr/bin/env php 
<?php 
$f = fopen("file.txt","a+"); 
for($i=0;$i<10;$i++) 
{ 
    sleep(1); 
    fwrite($f,"something\n"); 
    echo $i," write ...\n"; 
} 
fclose($f); 
echo "stop write"; 
?> 

運行PHP腳本之後,我用tail -f file.txt檢測到新content.And它顯示了新的內容,同時作爲PHP的輸出標籤。

+0

好的。至少可以提供一些關於在預定時間之前沖水的可能性。我將根據你的測試結果來處理事情。謝謝生成! – Nirmal 2010-07-01 10:34:35

2

該文件將保存在fclose上。如果您想將內容放入文件中,請使用fflush()

9

PHP可能會或可能不會立即寫入內容。它們之間有一個緩存層。你可以用fflush()強制它寫,但是你不能強迫它等待,除非你只使用一個fwrite()。

+0

確實; OTOH,當你調用fclose()時,它肯定會寫內容(和釋放文件鎖)。 – Piskvor 2010-07-01 09:31:21

+0

@Piskvor:文件夾監視軟件何時識別新創建的文件?它會在保存後或鎖定釋放後進行?這是至關重要的,因爲有大約8000個文本塊被寫入文件,並且監視程序不應該在兩者之間的任何地方被觸發。感謝您的投入。 – Nirmal 2010-07-01 09:36:20

+0

我不知道,問PrintFil的人。 – Sjoerd 2010-07-01 10:03:36