2011-08-19 212 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