PHP CURLOPT_WRITEFUNCTION似乎不起作用

时间:2011-08-19 20:06:42

标签: php curl ip-camera

我正在尝试使用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);

然而,流只是继续写入文件,最终文件大小越来越大。

我做错了什么?

此致

2 个答案:

答案 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);