2014-02-25 108 views
2

如果我文件正在被file_put_contents()處理時該怎麼辦。該文件是否會獲取文件的過去內容或尚未完成寫入的當前內容?文件處理問題

+0

你是什麼意思與「而」?併發進程/線程或...? – DonCallisto

回答

0

file_get_contents()將讀取不完整的文件,因爲file_put_contents()寫入緩衝的文件。特別是對於大文件,您將會產生這種效果。

編輯:注意(因爲它在其他評論想出了):

你可以用LOCK_EX標誌申請鎖定。

file_put_contents ($filename, $content, LOCK_EX); 

$content = file_get_contents ($filename, LOCK_EX); 
+0

是非常小的文件將被原子地寫入。但總的來說,這些功能不是原子的。 –

-1

如果一個進程試圖訪問而另一個寫該文件時,一個讀數將被鎖定,直到寫操作完成 - 這是如果你使用基於文件的會話,並有PHP文件,爲什麼像:

// a.php: 
session_start(); 
sleep(60); 

// b.php: 
session_start(); 
echo "Hi!"; 

然後,如果你加載a,隨後在不同的瀏覽器標籤bb將掛起,直到a完成。這是因爲a已鎖定會話文件,並且b正在等待釋放鎖。

這同樣適用於file_get_contents/file_put_contents

+0

這是錯誤的。沒有適用於file_get_contents/file_put_contents的鎖定。 –

+0

@KenyakornKetsombut需要引用 – Yang

+0

@djay檢查文檔http://au1.php.net/file_put_contents並尋找LOCK_EX –