2009-12-12 188 views
1

我有一個PHP腳本,需要大約10分鐘才能完成。顯示PHP腳本完成百分比

我想給用戶一些關於完成百分比的反饋,並且需要關於如何這樣做的一些想法。

我的想法是用jQuery和$ .post命令調用php頁面。

有沒有辦法從PHP腳本返回信息而不結束腳本?

例如,從我現在的知識來看,如果我返回變量,PHP腳本將停止運行。

我的想法是將腳本分成多個PHP文件,並在每次從前一個返回給出後運行.post。

但是,這仍然不會給出準確的剩餘時間評估,因爲每個腳本將是不同的大小。

任何想法的方式來做到這一點?

謝謝!

回答

8

您可以輸出echoflush(),但這不是最理想且相當脆弱的解決方案。

對於長時間操作,在後臺啓動腳本並在共享位置存儲/更新腳本狀態可能是個好主意。

例如您可以使用fopen('http://…調用,proc_open PHP CLI過程或甚至只是在中打開長時間運行的腳本來啓用腳本。

您可以將狀態存儲在數據庫或共享內存中(使用apc_store())。

這會讓用戶隨時檢查腳本的狀態(通過刷新頁面或使用AJAX),並且如果瀏覽器的連接超時,用戶不會失去腳本的跟蹤。

它還可以讓你避免兩次啓動相同的長腳本。

+1

謝謝!我沒有想到這一點。我可以讓它更新數據庫,然後有另一個.post命令,它會自動用數據庫中的當前百分比更新頁面。讓我們來看看人們有什麼其他想法 – krx 2009-12-12 19:21:13

+0

如果使用fopen()啓動一個10分鐘的腳本, ,在10分鐘之前它不會被殺死嗎?只是詢問... – MiseryIndex 2009-12-12 23:49:23

+0

長壽命的PHP任務必須執行'set_time_limit(0)'和'ignore_user_abort(true)'以避免被終止,然後無論是由用戶還是通過fopen啓動(「HTTP:// ...)'。 – Kornel 2009-12-13 02:49:56