我有一個運行在各種平臺上的Javascript應用程序。 (我試圖保持客戶端設備的列表儘可能大,包括早期的Android手機和早期的iPhone,使用caniuse.com)。爲什麼PHP文件只能在99.7%的嘗試中完全成功添加
每次客戶端應用程序的數據發生更改時,新數據都會附加到服務器上的純文本日誌文件中。附錄是大約20個字符到70個字符之間的單個字符串。
問題
每隔一段時間 - 在250左右一個時間 - 追加的第6到20個字符去擅離職守。
客戶端設備上的JavaScript應用程序通過XmlHttpRequest將數據發送到Windows PC上的PHP 5.5.10,然後將該數據寫入NAS的掛載分區上的磁盤文件(在PC上掛載爲Windows驅動器盤符) 。
的PHP是一個貓鼬web服務器上運行的Windows 7,然後將數據存儲在硬盤驅動器上的服務器的網絡上的國內網絡附加存儲設備上。 (Debian Linux NAS設備)NAS有時需要幾秒鐘才能啓動硬盤。
只有一個客戶端設備正在與任何特定的純文本文件,但多達10點客戶的設備可能在任何給定的時間內訪問各自的純文本文件。
的問題
有什麼事情,如果我修復服務器+ NAS組合上的延遲,這將消失? (例如,通過將文件本地放在服務器上)例如,
或者是否有辦法使用新設施來保證寫入?比如說,通過寫入SQLite表而不是純文本文件,或者Couchbase數據庫或CouchDB等。
只要客戶端設備的參與保持爲一個簡單的XmlHttpRequest,我可以保持廣泛的客戶端設備。
我已經改變了 _fopen($文件名, 「A」); fwrite($ stuff); FCLOSE()_ 序列 _file_put_contents($文件名,$的東西,FILE_APPEND | LOCK_EX)_ 這增加了一個隱含的文件鎖定的過程中,FCLOSE釋放()。 這應該使所有寫入成功或完全失敗。 (與目前的情況相反,它們偶爾會部分失敗) –