在网页中显示实时wget输出

时间:2014-02-20 08:00:10

标签: php bash shell


我正在使用 php shell_exec 函数调用shell脚本,其中我将文件从另一台服务器下载到服务器这个php页面使用 wget 命令托管,并在完成此过程后向我的页面发送报告。它工作正常。

这是我的TestFile.php文件

<?php
    $output = shell_exec("sudo /home/user/myScript");
    echo "<pre>$output</pre>";
?>

我的bash脚本myScript

#!/bin/sh
sudo wget -O /path/to/download/downloadfile http://example.com/TestFile.zip

我想在我调用shell脚本的网页上显示wget操作的实时进度。我想以百分比显示实时进度。通过这种方式,我可以使用此命令将wget的进度仅以百分比形式发送到网页

sudo wget -O /path/to/download/downloadfile http://example.com/TestFile.zip 2>&1 | grep -o "[0-9]\+%"

并且,输出就像这样

2%
4%
6%
8%
...
...
...
95%
97%
99%
100%

但是这个输出是在完成这个过程之后发生的。在进程运行时窗口没有显示任何内容。但我不想要这个。

我希望在完成命令后 wget 进程运行时实时更新流程。

任何人都可以帮我解决问题。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

目前无法测试,但这样的事情应该有效:

<?php

ob_start();

$descriptors = [
    ['pipe', 'r'],
    ['pipe', 'w'],
    ['pipe', 'w'],
];

$process = proc_open('wget blahblah', $descriptors, $pipes, '/tmp', []);

if(is_resource($process)) {
    while ($line = fgets($pipes[1])) {
        echo $line;
        ob_flush();
    }
}