2011-08-19 181 views
1

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

但是流只是继续写这最终越来越大的文件,文件大小更大。

我在做可怕的错误吗?

问候,

+0

答案是非常好的。 但是,如果你使用谷歌搜索“PHP CURLOPT_WRITEFUNCTION似乎并没有工作”,并没有什么可以帮助你...... 请确保从您尝试访问的URL的外出端口是开放的。 –

回答

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; 
} 
-2

试评论此curl_setopt($ CH,CURLOPT_FILE,$ FH);

+0

虽然我需要它写入文件。 – Joel