2015-04-03 47 views
1

我正在PHP中使用其exec()函數運行外部腳本。我正在尋找各種選項來創建進度條。我能夠通過AJAX創建一個簡單的旋轉加載器,但我無法實現百分比進度條。有沒有辦法做到這一點?如何在PHP執行函數中顯示進度條

+0

PHP在服務器上執行,並完成之前不會返回任何值。 – 2015-04-03 17:56:50

回答

4

根據您要執行的程序,你可以使用proc_open()代替exec(),這樣你就可以proccess輸出,計算百分比和使用ob_flush()扔回去給你的AJAX腳本, 。

在發送任何輸出之前,您需要等待執行完成並不是真的,但您的服務器緩存配置和瀏覽器渲染引擎有一些警告,所以它不太可靠。

如果您不使用Websockets(乾淨和現代的選項,可以通過PHP使用Ratchet或使用各種選項使用nodejs來實現),那麼執行所需操作的最可靠方法就是使用輪詢。

簡而言之,您不需要調用一次腳本,而是先執行第一個ajax請求來初始化進程,然後再次啓動服務器,以詢問腳本的執行狀態。

欲瞭解更多信息,看看這些問題的答案:

Run process with realtime output in PHP

PHP - Flushing While Loop Data with Ajax

Grab results from a php exec() while the command is still running?