2011-08-02 85 views
2

基本上我有一個XML文件來填充數據,我將有一個cron(在PHP)每隔5分鐘更新一次。但同時,我會讓用戶隨時訪問這個文件(我正在談論成千上萬的用戶)。php在同一時間從文件讀取和寫入

當我通過在.txt文件中寫入2百萬條文本行並同時讀取它來嘗試腳本時,當然file_get_contents()獲取.txt文件中的當前文本,並且不會等待它結束並在完成時獲取內容。所以我所做的是,我寫入一個臨時文件,然後將其重命名爲原始.txt文件。我的電腦上的重命名過程需要0.003秒(使用microtime()計算)。

你認爲這是一個合適的解決方案,否則將有用戶最終會有一個錯誤,該文件不存在?

+4

你爲什麼不使用數據庫來證明? – afuzzyllama

+0

XML從數據庫填充當然:) - 在5分鐘內,我會有數千個數據庫調用,我想將它們減少到1 - 它基本上緩存結果,在5分鐘內緩存5分鐘的數據庫調用的數據庫爲 – hex4

+0

聽起來完全可控。此外,您仍然可以添加緩存以防止往返。 – Gordon

回答

2

當然這是不合適的..你必須在0.003微秒內鎖定文件。

一個非常簡單的方法是標誌

例如創建一個名爲文件isReplacing

更換完成後,刪除文件isReplacing

當用戶想要的文件說,在getfile.php


while(file_exists("isReplacing")) 
{} 
//NOW echo file_get_contents() 

//BETTER: 
if(file_exists("isReplacing")) 
{ 
     //GET DATA FROM DATABASE 
} 
else 
{ 
     //ECHO THE FILE 
} 

注意這是一個愚蠢的方式,但我只是想

+0

如果我每隔5分鐘刪除一次該文件並重建它,並且如果文件不存在,只需從數據庫中獲取數據,您認爲如何? – hex4

+0

好的我編輯了答案:D –