程序間通訊

程序間通訊允許程式設計師在不同程序之間進行通訊。例如,讓我們考慮一下我們需要編寫一個可以執行 bash 命令並列印輸出的 PHP 應用程式。我們將使用 proc_open,它將執行命令並返回我們可以與之通訊的資源。以下程式碼顯示了從 php 執行 bash 中的 pwd 的基本實現

<?php
    $descriptor = array(
        0 => array("pipe", "r"), // pipe for stdin of child
        1 => array("pipe", "w"), // pipe for stdout of child
    );
    $process = proc_open("bash", $descriptor, $pipes);
    if (is_resource($process)) {
        fwrite($pipes[0], "pwd" . "\n");
        fclose($pipes[0]);
        echo stream_get_contents($pipes[1]);
        fclose($pipes[1]);
        $return_value = proc_close($process);

    }
?>

proc_open 使用 $descriptor 作為描述符規範執行 bash 命令。之後我們使用 is_resource 來驗證過程。完成後,我們可以使用根據描述符規範生成的 $ pipes 開始與子程序互動。

之後我們可以簡單地使用 fwrite 來寫入子程序的 stdin。在這種情況下,pwd 接著回車。最後 stream_get_contents 用於讀取子程序的 stdout。

始終記得使用 proc_close() 來關閉子程序,proc_close() 將終止子程序並返回退出狀態程式碼。