我有一個很長的工作來填補數據庫中的表。這項工作可能需要不同的時間才能完成。 所以,我需要一個進度條。只需指向頁面就足夠了。 迄今爲止,我發現了幾種解決方案:在腳本之間實現共享變量或如何實現服務器端進度的正確方法?
- 使用_SESSION。好的,它適用於我使用的大多數服務器,但是我在chrome上有很多ERR_RESPONSE_HEADERS_TOO_BIG錯誤,有時 - 在某些服務器上,由於在循環中調用session_start/session_write_close而導致「頭已發送」。我喜歡這種方法,但現在我已經拒絕
- 使用一種ob_start/ob_end_flush的長期運行的循環內。這不起作用。它只是在腳本結束後顯示所有緩衝的echo-ed消息。
- 使用分貝爲存儲共享變量(沒試過還)
- 使用單獨的(臨時)文件。 (尚未嘗試)。
我已經實現了基礎架構:一個用於長時間工作的腳本(在db中填充一個表),另一個用於JS讀取包含進度狀態的共享變量。我用jQuery .ajax方法調用的這兩個腳本都期望得到.done函數的結果。
有沒有其他的方法呢?看起來我會喜歡使用4)變體,但我想知道實施進度條的慣例是什麼。
謝謝:)
其建議您運行使用某種類型的後臺任務管理器的這些長期工作。我強烈建議你不要使用瀏覽器會話來運行它們。您可以讓瀏覽器請求它運行,但實際運行應排隊並在後臺執行。 – DevZer0
您是否試過這個解決方案 - http://spidgorny.blogspot.com/2012/02/progress-bar-for-lengthy-php-process。html? –
@ DevZer0 - 後臺作業管理器看起來很有趣。任何簡單的例子? – netanalyzer