在 PHP 中運行帶有即時輸出的進程
在 PHP 中執行進程時,可能需要即時顯示其輸出。本文探討了一種使用 exec() 函數和描述符規範的獨特配置來實現此目的的方法。
即時輸出擷取
擷取程式的輸出在即時情況下,有必要指定以下描述符規格:
$descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to );
此設定重定向stdin、stdout 和stderr 到管道,讓我們可以使用fgets() 函數即時從stdout 讀取。
範例:使用即時輸出進行Ping
為了示範此方法,讓我們執行帶有即時輸出的ping 指令:
$cmd = "ping 127.0.0.1"; $process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array()); echo "<pre class="brush:php;toolbar:false">"; if (is_resource($process)) { while ($s = fgets($pipes[1])) { print $s; flush(); } } echo "";
此程式碼將輸出ping 過程的每一行當它可用時,提供網路流量的即時視圖。
進程終止
當使用者離開網頁時終止進程可能是一個挑戰。對於像 ping 這樣長時間運行的進程,即使在頁面關閉後,它們也可能繼續運行。
為了解決這個問題,可以採用以下技術:
透過實作這些方法,開發人員可以確保從 PHP 腳本啟動的進程正常運行當使用者離開頁面時處理。
以上是如何從 PHP 進程取得即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!