程序間通訊
程序間通訊允許程式設計師在不同程序之間進行通訊。例如,讓我們考慮一下我們需要編寫一個可以執行 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()
將終止子程序並返回退出狀態程式碼。