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 进程,并通过标准输入向其传递了代码。然后从标准输出读取结果并显示。此过程模拟了与子进程之间的输入输出通信。标准错误输出也被捕获以供调试。