首页 > 后端开发 > php教程 > 如何在 PHP 中获取 Shell 命令的实时输出?

如何在 PHP 中获取 Shell 命令的实时输出?

Mary-Kate Olsen
发布: 2024-12-03 20:03:16
原创
320 人浏览过

How Can I Get Real-Time Output from Shell Commands in PHP?

使用 PHP Shell 执行实时输出

PHP 中的 Shell 执行,使用 shell_exec 和 exec 等函数,有利于与操作系统。但是,默认情况下,这些函数仅在命令完成后才显示整个输出。这限制了监控进度或显示实时更新的能力。

解决方案:释放实时输出

为了实现实时输出显示,PHP 提供了两种主要的选项:

  1. popen() 用于并行交互:

    popen() 允许您与子进程建立双向通信通道。这使您能够像读取文件一样读取和写入子进程。通过使用循环和 fread(),您可以捕获输出并动态显示它。

  2. passthru() 用于直接输出:

    对于更简单的方法,可以使用 passthru() 将命令的输出直接打印到浏览器。它提供了一种无需中间存储即可流式传输结果的便捷方法。

使用 popen() 的代码示例:

// Ensure flushing of output buffers
while (@ ob_end_flush());

// Open the child process for reading
$proc = popen($cmd, 'r');

echo '<pre class="brush:php;toolbar:false">';

// Keep reading and displaying output until EOF
while (!feof($proc)) {
    echo fread($proc, 4096);
    flush();
}

echo '
'; // Close the process pclose($proc);
登录后复制

注意:

  • 使用session_write_close()如果会话处于活动状态,则在循环之前避免阻塞并发请求。
  • 设置标头 header('X-Accel-Buffering: no');如果存在 Nginxgateway 来禁用缓冲。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板