我正在尝试使用curl读取一小部分数据流。
理想情况下,我想直接检索流中的第一个图像并将其写入jpg文件。
我正在尝试使用WRITEFUNCTION执行此操作,如果流的长度>则返回-1。说20000。
function receiveResponse($ch,$string) {
$length = strlen($string);
if($length >= 20000) { return -1; }
return $length;
}
$ch = curl_init('http://<url>/videostream.cgi');
curl_setopt($ch, CURLOPT_USERPWD, '<user>:<password>');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, "receiveResponse");
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_exec($ch);
然而,流只是继续写入文件,最终文件大小越来越大。
我做错了什么?
此致
答案 0 :(得分:1)
让我们看一下本手册http://www.php.net/manual/en/function.curl-setopt.php中的选项说明:
CURLOPT_WRITEFUNCTION 回调函数的名称,其中回调函数有两个参数。第一个是cURL资源,第二个是包含要写入数据的字符串。必须使用此回调函数保存数据。它必须返回写入的确切字节数,否则传输将被中止,并显示错误。
因此,它意味着可以将响应拆分为多个数据。要正确接收前20000个字节,必须添加$ full_length计数器:
$full_length = 0;
function receiveResponse($ch,$string) use (&$full_length) {
$length = strlen($string);
$full_length += $length;
if($full_length >= 20000) { return -1; }
return $length;
}
答案 1 :(得分:-2)
尝试评论此curl_setopt($ ch,CURLOPT_FILE,$ fh);