首頁 >後端開發 >php教程 >如何從 PHP 進程取得即時輸出?

如何從 PHP 進程取得即時輸出?

DDD
DDD原創
2024-12-23 18:34:14555瀏覽

How Can I Get Realtime Output from a PHP Process?

在 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 這樣長時間運行的進程,即使在頁面關閉後,它們也可能繼續運行。

為了解決這個問題,可以採用以下技術:

  • 使用 proc_terminate() 在腳本退出時明確終止進程。
  • 使用 pcntl_signal() 捕獲使用者離開頁面並終止進程
  • 為進程設定超時時間,並在指定時間後自動終止該進程。

透過實作這些方法,開發人員可以確保從 PHP 腳本啟動的進程正常運行當使用者離開頁面時處理。

以上是如何從 PHP 進程取得即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn