PHP curl_multi_getcontent получено частичное тело - PullRequest
1 голос
/ 24 января 2011

Я борюсь с этой проблемой.

Тело, которое я беру, не большое, 3100 символов. Apache регистрирует на сервере, что длина содержимого составляет 3100. Однако строка, возвращаемая curl_multi_getcontent, была сокращена до 1290 символов.

Обычно curl_multi_getcontent () работает нормально, но иногда мы получаем это странное поведение.

Есть идеи?

Ответы [ 2 ]

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

Этот пнул меня в зад. Кажется, это ошибка в (multi?) Curl системе php5. Я сталкивался с этой ошибкой при использовании многоуровневой библиотеки Rolling-Curl, но основная проблема, кажется, в самом php. Вот мой php -v:

PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:07:38) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

При некоторых обстоятельствах (в моем случае CURLOPT_TIMEOUT был максимальным) curl_error и curl_errno не будут правильно сообщать об ошибке в curl. Мне пришлось использовать ключ 'result' из массива, возвращаемого curl_multi_info_read. Этот код результата дал мне фактический номер ошибки, когда функции curl_err * сообщили все как обычно.

Я думаю, что эта проблема связана с этим сообщением об ошибке: http://bugs.php.net/bug.php?id=52558

0 голосов
/ 05 марта 2012

В моем коде отсутствовал чек для незавершенных переводов.

С осуществляемыми переводами:

http_code = 200
errno = 0
download_content_length = total length, e.g. 1M
size_download = current position, <= download_content_length

Кажется, что время (curlm_multi_exec == CURLM_CALL_MULTI_PERFORM) несколько недостаточно. Мы должны зацикливаться с usleep до тех пор, пока размеры не совпадут для этого URL-адреса или второй аргумент multi_exec объявляет, что все URL-адреса завершены.

Шаги для воспроизведения:

  • PHP <5.2, один URL с временем передачи в несколько секунд. </li>
...