PHP CURLOPT_WRITEFUNCTION似乎不工作
问题描述:
我正在尝试使用curl只读取一个数据流块。PHP CURLOPT_WRITEFUNCTION似乎不工作
理想情况下,我想只是检索流中的第一个图像,并将其写入一个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);
但是流只是继续写这最终越来越大的文件,文件大小更大。
我在做可怕的错误吗?
问候,
答
让我们看选项说明从本手册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;
}
答案是非常好的。 但是,如果你使用谷歌搜索“PHP CURLOPT_WRITEFUNCTION似乎并没有工作”,并没有什么可以帮助你...... 请确保从您尝试访问的URL的外出端口是开放的。 –