首頁 > 後端開發 > php教程 > 如何在 PHP 中運行和管理具有即時輸出的流程?

如何在 PHP 中運行和管理具有即時輸出的流程?

Linda Hamilton
發布: 2024-12-24 09:44:19
原創
180 人瀏覽過

How Can I Run and Manage Processes with Real-time Output in PHP?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板