Закрытие ручки curl в колл / коллбэк - PullRequest
1 голос
/ 17 марта 2011

Можно ли закрыть обработчик скручивания внутри обратного вызова 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% загружаемых мной файлов маленькие).

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Лучшим способом для вас будет:

curl_setopt($ch, CURLOPT_NOBODY, true);

Ответ о закрытии cutl в обратном вызове заголовка:

Возвращает количество фактически записанных байтов или возвращает -1, чтобы сообщить об ошибке библиотеке (это приведет к прерыванию передачи с кодом возврата CURLE_WRITE_ERROR).

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

1 голос
/ 17 марта 2011

Этот подход в лучшем случае кажется немного схематичным, и поведение может быть неопределенным.Я не пробовал, работает ли он или нет, но лично я бы подошел к вопросу, выбрасывая исключение.Это выглядит как более стандартный способ обработки проблем внутри функций и возврата к предыдущему состоянию.

Обработчик исключений вне вызова cURL может затем обработать закрытие самого дескриптора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...