我有一个curl进度回调,它通过curlopt_progress function选项工作,该选项在php中成功地调用了我的成员函数。dlnow变量返回正确的接收值,但dltotal始终返回0。我错过了什么?

class MyClass {

    function getFile(){

    ...

      $fp = fopen ($file, 'w+');
      $curl = curl_init();
      curl_setopt($curl,CURLOPT_URL,$signed['signed_url']);
      curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
      curl_setopt($curl, CURLOPT_FILE, $fp); // write curl response to file
      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($curl, CURLOPT_NOPROGRESS, 0);
      curl_setopt($curl, CURLOPT_PROGRESSFUNCTION, array($this, 'curl_progress_callback'));

    }

    function curl_progress_callback($dltotal, $dlnow, $ultotal, $ulnow){
        echo $dltotal; //Reports correct value
        echo $dlnow;   //Always returns 0
    }

}

编辑:这篇文章已经更新了@sabuj hassan的信息。最初我以为我收到了一个正确的dLoToT,但是一个错误的DLWO,但是在回调函数中有一个额外的不必要的参数。

最佳答案

注:对于大于7.32.0的libcurl
回调函数需要以下格式

curl_progress_callback($resource,$dltotal, $dlnow, $ultotal, $ulnow)

其中新的curl二进制文件不需要资源
curl_progress_callback($dltotal, $dlnow, $ultotal, $ulnow)

检查你的卷曲版本
curl -V

10-06 00:19