下载时PHP / Curl进度

时间:2017-04-21 08:43:24

标签: php jquery percentage

我正在通过php使用系统curl命令下载文件。这一切都很好,但我现在正试图在下载时显示一些进展。

curl命令和php调用的是:

$a = popen("cd user; curl -O -# remote.server.com/filename.tar.gz 2>&1", 'r');

ob_flush();flush();
while($b = fgets($a, 64)) {
    ob_flush();flush();
        if (preg_match('~\b(error|fail|unknown)\b~i',$b)) {
            echo "error^$b";
            exit;
        }
        echo str_replace('#','',$b);
       ob_flush();flush();
}
pclose($a);

这是使用ajax调用的,输出显示在div:

var last_response_len = false;
        $.ajax(url, {
            xhrFields: {
                onprogress: function(e)
                {
                    var this_response, response = e.currentTarget.response;
                    if(last_response_len === false)
                    {
                        this_response = response;
                        last_response_len = response.length;
                    }
                    else
                    {
                        this_response = response.substring(last_response_len);
                        last_response_len = response.length;
                    }
                    $(upg).show();
                    console.log(this_response)
                    var count = this_response.match(/%/g);
                    if (count !== null && count.length != 2) $(msg).html(this_response);
               }
            }
        })

这有效,但msg div中的结果显示不一致。 我可能会得到:

1%
5%
12.1%
12.5% 13.2%
14.2%
5.3%
16.7%

我得到部分结果,即:5.3% instead of 15.3%,我在同一输出中得到多个结果,即:12.5% & 13.2%

无论如何都要标准化,所以我只得到0%到100%?

由于

1 个答案:

答案 0 :(得分:1)

将php str_replace更改为

str_replace(['#', ' '], '', $b);

然后你只得到没有前面空白的百分比,你可以直接插入容器而不进行编辑。

实施例: https://3v4l.org/OGWqU