在PHP 中運行具有即時輸出的進程
在提供即時輸出的網頁上運行進程可能是一項很有價值的功能。例如,執行“ping”程序並逐行捕獲其輸出可以增強用戶體驗。要在 PHP 中實現此目的,請考慮以下方法:
要運行具有即時輸出的進程,可以使用 proc_open()。以下是一個範例:
$cmd = "ping 127.0.0.1"; $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 ); flush(); $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 "";
在此範例中,proc_open() 用於執行「ping 127.0.0.1」指令並即時擷取其輸出。 Descriptorspec 陣列定義流程的檔案描述符。具體來說,它將 stdin 設定為子進程讀取的管道,將 stdout 設定為子進程寫入的管道,將 stderr 設定為子進程寫入的管道。
flush()用於確保立即顯示子程序的任何輸出。 is_resource($process) 檢查子程序是否仍在執行。 while 循環不斷地從子程序的 stdout 管道讀取輸出並將其列印到網頁,讓您可以即時查看 ping 結果。
殺死正在運行的進程
要在使用者離開頁面時終止子進程,可以使用 proc_terminate()。對於「ping」進程,您可以使用以下程式碼:
proc_terminate($process); ?>
這將終止 ping 進程並阻止其繼續運行。
以上是如何在 PHP 中運行和管理具有即時輸出的流程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!