1

我正在尝试使用 curl 仅读取一大块数据流。

理想情况下,我只想检索流中的第一张图像并将其写入 jpg 文件。

我正在尝试使用 WRITEFUNCTION 执行此操作,如果流的长度 > 说 20000,则返回 -1。

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

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

我做错了什么可怕的事情吗?

问候,

4

2 回答 2

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;
}
于 2012-08-11T11:44:30.993 回答
-2

尝试评论此 curl_setopt($ch, CURLOPT_FILE, $fh);

于 2011-10-19T08:01:07.820 回答