【发布时间】:2013-12-13 10:48:42
【问题描述】:
我尝试使用 shell_exec 以与终端中显示类似的方式(同时)在网页上输出一个简单的 ping 命令;但它仅在完全执行后显示,而我需要它在终端上显示时显示,
我的代码是
<?php
$i= shell_exec("ping -c 4 google.com");
echo "<pre> $i <pre>";
?>
等了一会儿,一枪把整个东西都转储了..PHP可以识别每一行的输出并显示在网页上
编辑
我也试过了
<?php
$proc = popen("ping -c 4 google.com", 'r');
echo '<pre>';
while (!feof($proc)) {
echo fread($proc, 4096);
}
echo '</pre>';
?>
但我仍然得到相同的结果..
编辑
当我尝试在终端中执行此 PHP 代码时,(php test.php)它以与我们直接在服务器上执行 ping 时相同的方式正常工作。但在网页上还是一样。
【问题讨论】:
-
shell_exec 在命令完成之前不会返回。它不可能触发命令,然后让执行继续到 echo 命令。你可能会 popen() 然后 fread 在一个循环中抓取可用的行。
-
@MarcB所以这应该是这样做的方法!能详细点吗?
-
@MarcB 我已经编辑了我的问题,我用 popen 和 fread 尝试了上面的代码,但它也给了我相同的输出?我做错了什么?
-
这可能不仅是一步一步获取信息的问题,还可能是输出到浏览器的问题——请查看刷新输出缓冲区。这是一个相当复杂的主题,因为这里有多种因素在起作用——PHP 的输出缓冲,也可能是 Web 服务器的缓冲……最后但并非最不重要的一点是,浏览器是否希望在收到部分信息后立即显示。
-
@CBroe 正如我在编辑中提到的,我能够通过命令行执行这个 php 程序并获得所需的输出,但正如你所提到的,它在进入网页时会导致问题。有没有办法解决这个问题??
标签: javascript php