我目前有一個網站已被我的託管服務提供商兩次暫停「過度使用系統資源」。在每種情況下,我的一個PHP腳本在服務器上剩下300-400個拷貝。PHP腳本崩潰和最大執行時間
腳本本身從家裏的網絡攝像頭拉出圖像並將其複製到服務器。他們利用文件鎖來確保一次只能寫入一個文件。任何查看頁面的客戶端都會每3秒調用一次腳本。
最初我很困惑,因爲我已經理解PHP腳本完成(返回結果)或崩潰(返回內部服務器錯誤頁面)。然而,我知道「已停用的腳本」是非常普遍的現象。
任何人都可以教育我嗎?我已經谷歌搜索到死亡,但我看不到腳本可以在崩潰的狀態下結束。當它達到最大執行時間時會不會超時?
我的託管服務提供商在Linux平臺上將PHP設置爲CGI。我相信我實際上已經發現我的腳本存在這個問題,因爲我沒有意識到這個羣是一個阻塞函數(並且我沒有使用LOCK_NB掩碼)。我假設以某種方式,我的腳本的數百個副本最終阻止等待資源變得可用,並導致崩潰?這聽起來似乎合理嗎?我不願意重新啓用該網站,以免再次被暫停。
任何見解非常感謝。
我看不出爲什麼你需要一個文件鎖定 - 或者更重要的是,爲什麼多個運行腳本需要寫入同一個文件。這聽起來像你可能在setInterval()方法上調用ajax,而應該在前一個ajax調用的成功處理程序中調用'setTimeout()'。如果你是'flock()'文件,確保你在完成之後立即記住'LOCK_UN',並且記住如果你正在讀它,你不需要'LOCK_EX','LOCK_SH '就足夠了。 – DaveRandom 2012-08-15 12:12:01
這聽起來像是實際提供商的問題;他們是否使用Apache/suPHP? – 2012-08-15 12:23:40
@Jack起初,我認爲這實際上可以通過mod_php來看到(剛剛測試過) - 因爲'flock()'會阻塞,當你在* nix上運行時,如果腳本從不到達鎖定隊列的頂部。這是非常愚蠢的,但顯然是這樣。在['set_time_limit()'手冊頁](http://php.net/manual/en/function.set-time-limit.php)上也有關於此的說明。 – DaveRandom 2012-08-15 12:28:43