2011-03-17 59 views
1

可以在CURLOPT_HEADERFUNCTION或CURLOPT_WRITEFUNCTION回調中關閉卷發處理程序嗎?例如關閉標題/寫回調中的捲曲句柄

  curl_setopt_array($ch, array(
          CURLOPT_HEADERFUNCTION => array($this, 'callbackWriteHeader'), 
          CURLOPT_WRITEFUNCTION => array($this, 'callbackWriteBody'), 
       ... 
      protected function callbackWriteHeader($ch, $string) { 
         if (...<check headers here...) { 
            curl_close($ch); 
         } 

使用案例:我不想下載大文件,並希望避免額外的HEAD請求只是爲了學習文件大小(因爲我下載的文件的99%都是小)。

回答

1

這種方法似乎有點粗略,最好的行爲可能是未定義的。我沒有嘗試過它是否有效,但我個人會通過拋出異常來解決問題。這似乎是處理函數內的問題並返回到先前狀態的更加標準的方式。

cURL調用外的異常處理程序可以處理關閉句柄本身。

+0

你能澄清的功能是 「捲曲外呼」?它是調用curl_exec/curl_multi_exec的函數嗎? 如何使用curl_multi來識別要關閉的特定句柄? – Alex 2011-03-17 16:44:22

1
你會

更好的辦法:

curl_setopt($ch, CURLOPT_NOBODY, true); 

回答有關在頭回調封閉cutl:

返回實際寫入或返回-1信號誤差圖書館的字節數(它會導致它通過CURLE_WRITE_ERROR返回碼中止傳輸)。

http://curl.haxx.se/libcurl/php/examples/callbacks.html