有沒有辦法讓PHP在頁面執行大型腳本時顯示進度?例如,如果我解析一個大型數組,我可以在整個過程中輸出一個狀態更新?執行期間的PHP進度更新
回答
有四種方法可以做到這一點我可以想到。我只使用過其中兩個:
1)您可以定期推送輸出(刷新),並希望它通過瀏覽器。這可能僅在某些情況下才起作用 - Web服務器(apache)可能會擁有自己的緩存併爲您保留數據,直到它擁有足夠的數量,ISP/Workplace/User可能擁有自己的緩存,可能直到整個頁面完成後才轉發信息,最後瀏覽器可能無法顯示它。所以不推薦。 (未使用)
2)對本地文件(或數據庫)進行狀態更新,然後通過AJAX進行查詢。這已經在評論中提出,你不需要通過上傳文件。您將使用AJAX調用來啓動流程(使用通用標識符(例如會話來鏈接所有調用)),然後流程將其狀態更新爲文件(鏈接到公共標識符),然後AJAX定期調用服務器並讀取狀態文件。當狀態文件顯示「完成」時,您可以重定向到一個新頁面(使用狀態生成)或只是通過AJAX更新。這種方法效果很好 - 我最近在移動設備上使用它來保持移動站點在等待後臺事件時連接;如果一切都失敗了,我有一個「超時」。
3)分批運行PHP腳本。如果PHP具有最大執行時間並且您可能超過它,那麼您需要這個。基本上,你運行30秒,然後確定一個當前狀態的頁面,並在頭部啓動下一個過程,從最後一個過程開始的元刷新。您通過URL和HTML傳遞狀態。如果你使用這種方法,如果瀏覽器從不從服務器回聽,那麼如果互聯網連接不好,它可能會失敗;所以結合AJAX方法(即AJAX調用「請先做50個,等待完成,更新狀態,請做下50個等待,更新狀態等等)是一個很好的混合解決方案。你還需要確保你的腳本能夠安全地處理如果你從一個先前處理的位置開始處理,那麼處理過程如下:
4)你打開一個從瀏覽器到服務器的javascript套接字,並通過套接字更新我從來沒有使用過這個,因爲瀏覽器支持套接字,但有一些例子可用,如果你知道的觀衆,他們有瀏覽器,支持插座很好。
- 1. vb.Net在執行期間用進度更新書寫更好的代碼
- 2. 執行WCF時的進度更新
- 3. 在循環期間更新UIProgressBar進度
- 4. 更新進度期間灰色網頁在ASP.NET中運行
- 5. 下載期間的Firemonkey OSX更新進度條
- 6. Perl - 在執行系統()命令期間顯示進度
- 7. 在執行Perl-CGI命令期間打印進度條
- 8. 進度條更新進度
- 9. C#WPF應用程序執行任務的更新進度
- 10. 進度條模擬執行時間
- 11. 循環,執行時間和進度條
- 12. 更新進度
- 13. 更新進度
- 14. 在更新數據庫期間顯示進度條
- 15. 如何在長循環期間更新進度欄?
- 16. 網絡調用期間進度條更新
- 17. httpUploadProgress期間的進度條
- 18. PHP執行時間測量精度
- 19. 執行期間Zend MVC刷新
- 20. 如何在執行任務時更新進度欄
- 21. 在執行Nunit測試期間進程終止執行
- 22. Android - 在App Widget的更新期間阻止點擊進行更新
- 23. Perl:如何在執行期間獲得實時更新
- 24. 定時器執行期間每秒更新一次變量
- 25. 在更新期間執行每個最後插入ID
- 26. Toolkit.getDefaultToolkit()。getLockingKeyState(...)在程序執行期間從不更新
- 27. 更新星火變流在執行期間
- 28. PHP更新日期時間與會話
- 29. 保存上次更新ID和日期從歷史更新更新變化觸發期間進行
- 30. PHP在進程運行期間刷新臨時表單
你到目前爲止發現了什麼? – dbf
頁面是白色的整個腳本解析數組 – user1647347
我只是顯示紡車 – Cjueden