2014-07-08 103 views
0

我編寫了一個PHP腳本,可以獲取遠程文件並使用cURL將其提供給客戶端。使用cURL即時獲取下載文件的大小

它就像一個代理...

召喚:

<?php 
[...] 
    public function streamContent($url) 
    { 
     $curl = curl_init(); 

     curl_setopt($curl, CURLOPT_URL, $url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($curl, CURLOPT_FILETIME, true); 

     if($this->cookie) { 
      curl_setopt($curl, CURLOPT_COOKIEFILE,  $this->cookie); 
      curl_setopt($curl, CURLOPT_COOKIEJAR,  $this->cookie); 
     } 

     if($this->follow) { 
      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
     } 

     curl_setopt($curl, CURLOPT_HEADERFUNCTION, array($this, "streamHeader")); 
     curl_setopt($curl, CURLOPT_WRITEFUNCTION, array($this, "myProgressFunc")); 
     $data = curl_exec($curl); 
     curl_close($curl); 
    } 

    private function streamHeader($curl,$string) 
    { 
     $stringTrim = trim($string); 
     if(!empty ($stringTrim)) { 
      if(!preg_match('~chunk~i', $stringTrim)) header($stringTrim); 
     } 

     return strlen($string); 
    } 

    private function myProgressFunc($curl, $str) 
    { 
     echo $str; 

     return strlen($str); 
    } 
[...] 
$object->streamContent('http://url_to_distant_file'); 
?> 

現在,我想知道有多少個字節的客戶已經下載了(在現場,即使下載被停止)

我想我可以寫上myProgressFunc()收穫的人,但我不知道如何:/

有誰知道如何實現這一目標?

謝謝!

編輯: 嗯... myProgressFunc()返回strlen(),所以它的大小以字節爲單位下載,對嗎?

+0

的[在PHP捲曲下載進度]可能重複(http://stackoverflow.com/questions/13958303/curl-download-progress-in-php) – Ben

回答

1

使用curl_setopt($curl, CURLOPT_PROGRESSFUNCTION, "myProgressFunc")而不是WRITEFUNCTION。在這裏看到:cURL download progress in PHP

+0

我可以用CURLOPT_PROGRESSFUNCTION與CURLOPT_WRITEFUNCTION?在CURLOPT_WRITEFUNCTION之前,CURLOPT_PROGRESSFUNCTION的回調是否將內容返回給客戶端? – Doubidou