proc_open
执行一个命令,并且打开用来输入/输出的文件指针
proc_open
PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8
proc_open() 函数用于执行一个命令,并且可以更细粒度地控制输入、输出和错误流。它允许你与子进程进行交互,适用于复杂的进程控制需求,例如运行外部程序并通过管道与其通信。
resource proc_open(string $command, array $descriptor_spec, array &$pipes, ?string $cwd = null, ?array $env_vars = null, ?array $options = null)
如果成功,则返回一个代表进程的资源类型;失败时返回 false。
<?php $descriptorspec = [ 0 => ["pipe", "r"], // 标准输入,子进程从此管道读取 1 => ["pipe", "w"], // 标准输出,子进程向此管道写入 2 => ["pipe", "w"] // 标准错误,也向此管道写入 ]; <p>$process = proc_open('php', $descriptorspec, $pipes);</p> <p>if (is_resource($process)) {<br> fwrite($pipes[0], '<?php echo "Hello from child process\n"; ?>');<br> fclose($pipes[0]);</p> <p>echo stream_get_contents($pipes[1]);<br> fclose($pipes[1]);</p> <p>$stderr = stream_get_contents($pipes[2]);<br> fclose($pipes[2]);</p> <p>$return_value = proc_close($process);</p> <p>echo "Return code: $return_value\n";<br> if ($stderr) {<br> echo "Errors: $stderr\n";<br> }<br> }<br> ?><br>
本示例使用 proc_open 启动了一个 PHP 进程,并通过标准输入向其传递了代码。然后从标准输出读取结果并显示。此过程模拟了与子进程之间的输入输出通信。标准错误输出也被捕获以供调试。