【问题标题】:Show real time wget output in a web page在网页中显示实时 wget 输出
【发布时间】:2014-02-20 08:00:09
【问题描述】:


我正在使用 phpshell_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 进程运行时实时更新进程,而不是在完成命令后。

谁能帮我解决这个问题。

提前致谢。

【问题讨论】:

    标签: php bash shell


    【解决方案1】:

    目前无法对其进行测试,但应该可以这样:

    <?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();
        }
    }
    

    【讨论】:

    • 对不起我的无知,我正在从 php 页面调用一个 shell 脚本。没有从页面运行任何 shell 命令。如何使用此 php 调用获得进度? @Igor Pantović 因为我不擅长 php,所以我无法得到你的答案。我还在这里检查了php doc。但我还是得不到。请帮忙。
    • proc_open 的第一个参数是您要运行的 shell 命令。就像您直接使用 bash 一样。
    • 这是否意味着我可以使用 proc_open 函数运行 bash 脚本。当我将文件从一台服务器保存到另一台服务器时,我必须运行一个 shell 脚本而不仅仅是一个命令。我尝试了上述过程,但无法完成。
    • 你可以。前提是您的服务器允许。但出于安全考虑,许多服务器不允许这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多