首頁 > 後端開發 > php教程 > 如何執行和終止即時PHP進程?

如何執行和終止即時PHP進程?

Patricia Arquette
發布: 2024-12-05 08:26:11
原創
672 人瀏覽過

How to Execute and Terminate Realtime PHP Processes?

PHP 中的即時進程執行與終止

本題探討如何在網頁上執行進程並即時接收其輸出,無需等待該流程完成。問題的第二部分解決瞭如何在使用者離開頁面時終止此類進程。

在 PHP 中執行進程並串流其輸出的一種方法是透過 proc_open() 函數。此函數允許建立一個可以獨立於 PHP 父進程運行的子進程。為了方便即時輸出,您可以指定 $descriptorspec 參數和適當的檔案描述子來擷取進程的 stdout 和 stderr 流。

$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());
登入後複製

子程序建立後,可以使用循環不斷地捕捉進程的 stdout 和 stderr 流。從 stdout 管道讀取並列印輸出。

echo "<pre class="brush:php;toolbar:false">";
if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";
登入後複製

要在使用者離開頁面時終止子進程,可以使用 PHP shutdown 功能。關閉函數在 PHP 腳本終止時執行,這可能會在使用者關閉瀏覽器標籤或離開頁面時發生。在關閉函數中,可以對子程序句柄呼叫 proc_close() 來終止子程序。

register_shutdown_function(function() {
  proc_close($process);
});
登入後複製

以上是如何執行和終止即時PHP進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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