2017-04-21 16 views
0

私はphp経由でシステムのcurlコマンドを使用してファイルをダウンロードしています。それはうまくいきましたが、ダウンロードしていくうちにいくつかの進歩を見せようとしています。呼ばれるダウンロード中に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にshowin結果は一致しない。私は得ることができます :

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

私は部分的な結果は、IEを取得:5.3% instead of 15.3%を、私はすなわち、同じ出力の中に複数の結果を得る:12.5% & 13.2%

はこれを標準化するとにかくので、私は唯一の100に至るまでの0%を取得しています%?

おかげ

答えて

1

変更

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

にPHPのstr_replaceは、その後、あなたがちょうど編集せずにコンテナに挿入することができ、先行ブランク、なし、唯一の割合を取得します。

例:このため https://3v4l.org/OGWqU

+0

感謝。私は実際にそれを働いたが、あなたの答えは私が思いついたものと事実上同じです。私が追加した唯一の他のものは、5文字があれば結果をエコーすることです。この結果は少し休止し、プロセスは '10.0%'で始まります。これは、数字の欠落箇所が2つある場合にうまく機能します。 – Tom

関連する問題