当前位置: 首页> 函数类别大全> proc_open

proc_open

执行一个命令,并且打开用来输入/输出的文件指针
名称:proc_open
分类:程序执行
所属语言:php
一句话介绍:执行一个命令,并且打开用来输入/输出的文件指针

proc_open

函数名

proc_open

适用PHP版本

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)

参数

  • $command:要执行的命令字符串。
  • $descriptor_spec:一个数组,描述了标准输入、输出和错误的行为(是管道、文件还是其他)。
  • &$pipes:一个数组,proc_open 会向其中填充用于通信的文件指针资源。
  • $cwd(可选):子进程的初始工作目录。
  • $env_vars(可选):传递给进程的环境变量数组。
  • $options(可选):一个数组,用于配置额外选项,例如是否使用新控制台窗口(Windows)等。

返回值

如果成功,则返回一个代表进程的资源类型;失败时返回 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 进程,并通过标准输入向其传递了代码。然后从标准输出读取结果并显示。此过程模拟了与子进程之间的输入输出通信。标准错误输出也被捕获以供调试。

同类函数
  • 把字符串转码为可以在 shell 命令里使用的参数 escapeshellarg

    escapeshellarg

    把字符串转码为可以在shell命令里使用
  • 执行一个外部程序 exec

    exec

    执行一个外部程序
  • 执行外部程序并显示输出 system

    system

    执行外部程序并显示输出
  • 执行一个命令,并且打开用来输入/输出的文件指针 proc_open

    proc_open

    执行一个命令,并且打开用来输入/输出的文
  • shell 元字符转义 escapeshellcmd

    escapeshellcmd

    shell元字符转义
  • 关闭由 proc_open() 打开的进程并且返回进程退出码 proc_close

    proc_close

    关闭由proc_open()打开的进程并
  • 获取由 proc_open() 函数打开的进程的信息 proc_get_status

    proc_get_status

    获取由proc_open()函数打开的进
  • 杀死一个proc_open打开的进程 proc_terminate

    proc_terminate

    杀死一个proc_open打开的进程
热门文章