2012-08-02 48 views
4

我使用PHP的fputcsv在我們正在製作的應用程序中記錄投票。我的代碼的保存部分粗略地重新排列這一點:可能一次寫入多個PHP文件中的同一個文件?

$handle = fopen('votes.csv', 'a'); 
fputcsv($handle, $data); 
fclose($handle); 

這在測試中完美無缺地工作。但是,我有一個小問題。在生產環境中部署時,很多用戶可能會同時向這個腳本發出請求。我很好奇PHP如何處理這個問題。

我可能會遇到問題,並因此而失去投票嗎?如果是這樣,我能做些什麼來防止它呢?解決方案比簡單使用數據庫更復雜嗎?最後,我該如何測試這種情況,哪裏會同時提出很多請求?有沒有測試這類東西的東西?

+1

使用!a!數據庫! (對於那些,你還沒有注意到它:'SQLite'是無服務器的,並在默認情況下在PHP中啓用)。用它! – KingCrunch 2012-08-02 14:42:37

+0

嘗試[這篇文章](http://www.webmasterworld.com/php/3165926.htm)。 – Matt 2012-08-02 14:42:56

+0

在繼續之前檢查'fopen'是否失敗。 – Jocelyn 2012-08-02 14:43:33

回答

3

寫入文件可能會導致併發用戶出現問題。如果您改爲插入數據庫,則可以讓數據庫自己處理隊列。如果用完連接,它很容易被跟蹤,並且您可以隨時查看db上的負載。

在數據庫中的插入比源文件的附加要少資源。話雖如此,你需要非常沉重的負載才能生效 - 但是對於數據庫,您可以使用查詢隊列中的內部版本來緩解併發壓力的很大一部分。

當您向數據庫發送請求時,它實際上會進入隊列進行處理。只有當你的PHP代碼有一個超時時纔會被執行(基本上,PHP被告知放棄等待數據庫響應 - 你可以通過PHP和Apache設置來控制它),所以你有一個夢幻般的內置緩衝。

相關問題