我通过CURLOPT_PROGRESSFUNCTION选项成功地调用了我在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哈桑的信息。最初我以为我收到了正确的dltotal,但不正确的dlnow,但我在回调函数中有一个额外的不必要的参数。*
5条答案
按热度按时间gt0wga4j1#
注意:对于早于7.32.0的libcurl
回调函数需要具有以下格式
字符串
因为较新的curl二进制文件不需要资源
型
检查你的curl版本
型
5cnsuln72#
尝试删除类:
字符串
然后从
callback
中删除第一个参数。型
UPDATE:一个工作代码:尝试从您的终端运行它。
型
az31mfrm3#
我们可以简化为
字符串
甚至以下是跨版本兼容的。
型
最后,
型
flmtquvp4#
问题似乎是我请求的网站没有发送http content-length,所以dltotal总是空的。感谢@Subuj哈桑纠正了我在curl_progress_callback中的错误,这个错误有太多的值,让我最初认为问题是dlnow值。
wnvonmuf5#
使用CURLOPT_XFERINFOFUNCTION回调:-
字符串