我見過很多實現進度條的web應用,但是,我的問題與非上傳類有關。如何實現現代PHP Web應用程序的AJAX進度指示器?
許多PHP web應用程序(phpBB,Joomla等)都實現了一個「智能」安裝程序,它不僅指導您完成軟件的安裝,還能讓您瞭解當前正在執行的操作。例如,如果安裝程序正在創建SQL表或編寫配置文件,它會報告這一點而不要求您點擊。 (基本上,坐下來放鬆安裝。)
另一個很好的例子是與Joomla的Akeeba備份(以前的Joomla包)。當您執行Joomla安裝的備份時,它會對安裝目錄進行完整歸檔。但是,這需要很長時間,因此需要更新進度。但是,服務器本身對PHP腳本執行時間有限制,所以似乎要麼
- 備份腳本能夠繞過它。
- 存儲了一些臨時數據,以便將檔案追加到(如果可以添加檔案)。
- 客戶端腳本經常調用服務器的PHP來執行操作。
我一般猜測(不特定於Akeeba)是#3,即:
Web page JS -> POST foo/installer.php?doaction=1 SESSID=foo2 Server -> ERRCODE SUCCESS Web page JS -> POST foo/installer.php?doaction=2 SESSID=foo2 Server -> ERRCODE SUCCESS Web page JS -> POST foo/installer.php?doaction=3 SESSID=foo2 Server -> ERRCODE SUCCESS Web page JS -> POST foo/installer.php?doaction=4 SESSID=foo2 Server -> ERRCODE FAIL Reason: Configuration.php not writable! Web page JS -> Show error to user
我99%肯定這是不是這樣的,因爲這將創建一個非常討厭的依賴用戶啓用Javascript。
我想我的問題可以歸結爲以下幾點:
- 是如何長時間運行的PHP腳本(Web服務器上,當然)處理,並能夠「活下去」過去的PHP最大的執行時間?如果他們不「作弊」,他們如何能夠將任務分散到手邊? (我注意到Akeeba Backup確實承認了PHP的最大執行時間限制,但我不想深深地發現這樣的代碼。)
- 通過AJAX + PHP顯示進度如何?我讀過人們使用文件來指示進度,但對我來說,這似乎是「骯髒」,並對I/O造成一些壓力,特別是對於運行上述腳本的擁有10,000多個訪問者的活動服務器。
此腳本的環境是啓用safe_mode的地方,限制一般爲30秒。 (基本上是一個限制性的,免費的0美元的主機)。這個腳本針對所有觀衆(將會公開),所以我無法控制它的主機。 (並且這假設我不會責怪最終用戶有一個不好的主機。)
我不一定需要代碼示例(雖然他們非常感謝!),我只需要知道實現這一點的邏輯流程。
注意:這些安裝程序將要求您啓用JavaScript以執行您所描述的任何幻想效果 - 如果您的應用正在執行的任務取決於JavaScript *,則取決於JavaScript *沒有任何「討厭」。人們會使用漸進式增強功能(只有在javascript可用時才添加功能)才能添加絕對可選的功能。在你給的例子中,AJAX調用輪詢,更新頁面,顯示和隱藏進度條......所有這些都需要JavaScript,這很好。 –
@Chris是的,當且僅當它依賴於Javascript。顯然,漂亮的進度條(以及一般的任何進度顯示)都需要AJAX。但是,如果用戶根本沒有Javascript呢?我的應用程序沒有依賴於Javascript - 只是簡單的HTML和CSS3。因此,我詢問了長時間運行PHP腳本的另一個問題。 :)(我認爲這是可能的更新sans Javascript與<元刷新,但不是非常確定。) –