在 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 这样长时间运行的进程,即使在页面关闭后,它们也可能继续运行。
为了解决这个问题,可以采用以下技术:
通过实现这些方法,开发人员可以确保从 PHP 脚本启动的进程正常运行当用户离开页面时处理。
以上是如何从 PHP 进程获取实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!