2017-04-21 1 views
0

PHP를 통해 시스템 컬 명령을 사용하여 파일을 다운로드하고 있습니다. 그게 전부 잘 작동하지만, 지금은 다운로드로 진행 상황을 보여 주려고 노력 중입니다. 라는다운로드하는 동안 PHP/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); 

이 아약스를 사용하여 호출되고 출력은 사업부에 표시됩니다

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에 나와 서 결과는 일관성이 없다. I 얻을 수

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

를 I가 부분적인 결과 즉 얻을 그래서 I에서만 100까지 0 %를 얻을 12.5% & 13.2%

이 표준화 어쨌든이다 5.3% instead of 15.3%는, I는 동일한 출력 즉 내의 복수의 결과를 얻을 %?

감사

답변

1

변화

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

에 PHP는 않는 str_replace는 다음 당신은 방금 편집하지 않고 컨테이너에 삽입 할 수 있습니다 앞의 공백없이 만 비율을 얻을.

예 : 이것에 대한 https://3v4l.org/OGWqU

+0

감사합니다. 나는 실제로 그것을 해결했지만, 당신의 대답은 제가 생각해 낸 것과 거의 같습니다. 내가 추가 한 유일한 다른 것은 5 개의 문자가있는 경우에만 결과를 반향시키는 것입니다. 이 결과는 약간 일시 중지 된 후 프로세스가 '10.0 %'에서 시작됩니다. 이것은 숫자가 누락 된 곳이 몇 개있을 때 잘 작동합니다. – Tom

관련 문제