首页 >后端开发 >php教程 >如何从 PHP 进程获取实时输出?

如何从 PHP 进程获取实时输出?

DDD
DDD原创
2024-12-23 18:34:14513浏览

How Can I Get Realtime Output from a PHP Process?

在 PHP 中运行带有实时输出的进程

在 PHP 中执行进程时,可能需要实时显示其输出。本文探讨了一种使用 exec() 函数和描述符规范的独特配置来实现此目的的方法。

实时输出捕获

捕获进程的输出在实时情况下,有必要指定以下描述符规范:

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from
    1 => array("pipe", "w"), // stdout is a pipe that the child will write to
    2 => array("pipe", "w") // stderr is a pipe that the child will write to
);

此设置重定向 stdin、stdout 和stderr 到管道,允许我们使用 fgets() 函数实时从 stdout 读取。

示例:使用实时输出进行 Ping

为了演示此方法,让我们运行带有实时输出的 ping 命令:

$cmd = "ping 127.0.0.1";

$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre class="brush:php;toolbar:false">";

if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";

此代码将输出 ping 过程的每一行当它可用时,提供网络流量的实时视图。

进程终止

当用户离开网页时终止进程可能是一个挑战。对于像 ping 这样长时间运行的进程,即使在页面关闭后,它们也可能继续运行。

为了解决这个问题,可以采用以下技术:

  • 使用 proc_terminate() 在脚本退出时显式终止进程。
  • 使用 pcntl_signal() 捕获用户离开页面并终止进程
  • 为进程设置超时时间,并在指定时间后自动终止它。

通过实现这些方法,开发人员可以确保从 PHP 脚本启动的进程正常运行当用户离开页面时处理。

以上是如何从 PHP 进程获取实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn