关闭标题/写回调中的curl句柄

时间:2011-03-17 13:22:30

标签: php curl

是否可以在CURLOPT_HEADERFUNCTION或CURLOPT_WRITEFUNCTION回调中关闭curl处理程序? e.g。

            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%的文件很小)。

2 个答案:

答案 0 :(得分:1)

这种方法似乎有点粗略,行为可能未定义。我没有尝试过是否有效,但我个人会通过抛出异常来解决问题。这似乎是处理函数内问题并返回先前状态的更标准方法。

然后,cURL调用之外的异常处理程序可以处理关闭句柄本身。

答案 1 :(得分:1)

更好的方法是:

curl_setopt($ch, CURLOPT_NOBODY, true);

回答关于在标题回调中关闭cutl的问题:

  

返回实际写入的字节数或返回-1以向模块发送信号错误(它将导致它使用CURLE_WRITE_ERROR返回码中止传输)。

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