PHP Curl POST проблема, заставляющая PHP использовать 100% CPU - PullRequest
5 голосов
/ 27 ноября 2009

Я пытаюсь загрузить данные с POST на мой веб-сервер, но иногда cURL просто останавливается и заставляет PHP бесконечно долго использовать 100% CPU.

Я использую код ниже.

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $URL);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
curl_setopt($curl, CURLOPT_HEADER, true);
$page = curl_exec($curl);
curl_close($curl);

Было бы замечательно понять, что является причиной или как отследить эту проблему.

Ответы [ 4 ]

1 голос
/ 27 ноября 2009

Если это действительно «вызов» curl, который зависает и выполняет 100% CPU, то это ошибка curl, и вам, вероятно, следует рассмотреть возможность обновления вашего libcurl.

0 голосов
/ 30 ноября 2009

Возможно, проблема в том, что вы указываете в качестве данных поста. Не могли бы вы сделать var_dump($postdata) прямо перед вашим звонком в cURL и опубликовать вывод здесь? cURL может зацикливаться на проблеме типизации / сериализации, или ваши данные поста просто недействительны (и, надеюсь, мы сможем исправить это!)

0 голосов
/ 27 ноября 2009

Можете ли вы определить, связано ли это с конкретным файлом? Возможно, что-то связано с кодировкой или длиной загрузки?

Моей первой мыслью было бы, по крайней мере, определить, вызывает ли проблема конкретный файл / набор файлов; запишите имена файлов (и, возможно, содержимое) и типы перед загрузкой, а также имя файла после его завершения. Таким образом, вы будете точно знать, какие файлы являются причиной проблемы, и вы можете двигаться дальше.

0 голосов
/ 27 ноября 2009

Обновление до новейшей версии PHP, PHP 5.3.1.

Если проблема все еще сохраняется, и ваш сервер работает под управлением Windows, обновите его до чего-либо еще, в частности до формы * NIX: дистрибутив GNU / Linux, форма BSD, SunOS и т. Д. *

Если проблема сохраняется и тогда, или вы считаете, что Windows является хорошей ОС для серверов [1], инструкции по отслеживанию проблемы и отправке отчета об ошибке приведены здесь: http://bugs.php.net/how-to-report.php

[1] Microsoft сама должна ежемесячно перезагружать каждую машину за microsoft.com.

...