Использование CURL в цикле для загрузки файла, первый работает, второй один раз - PullRequest
0 голосов
/ 07 июня 2010

Утро всем,

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

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

Кто-нибудь может подсказать, почему он всегда выходит из строя во 2-й раз и как это исправить?

Фрагмент кода:

// download image

$extension = "gif";
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 90);
curl_setopt($ch, CURLOPT_URL, $imgurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
echo $imgurl . " attempting to open URL ";
$i = curl_exec($ch);
if ( $i==false ) {
  echo curl_errno($ch).' '.curl_error($ch);
}
$image_name=time().'.'.$extension;
$f = fopen('/fulldirectorypath/' . $image_name ,'w+');
fwrite($f,$i);
fclose($f);

Я добавил туда эхо, чтобы отобразить $ IMGURL, чтобы убедиться, что он действителен, и увеличил тайм-аут до 90 секунд, но все равно не получается. Вот что я вижу на экране:

http://images.eu -xmedia.de / миниатюры / 34555861/5676051 / пт = рис, Ланг = 2, origfile = да / image.gif попытка открыть URL 28 Операция тайм-аут через 90 секунд с 0 Получено байтов

В моем каталоге создан пустой файл.

большое спасибо,

Грег

Ответы [ 2 ]

0 голосов
/ 07 июня 2010

Попробуйте добавить curl_close($ch); после fclose($f);. Мне кажется вероятным, что он пытается повторно использовать соединение, которое, в свою очередь, вызывает проблему.

0 голосов
/ 07 июня 2010

Если вы заходите на один и тот же сайт снова и снова, у них может быть что-то, из-за чего запросы приходят слишком быстро. Если вы делаете цикл, попробуйте добавить краткое sleep после каждой итерации.

Одна вещь, которую вы, вероятно, должны обратить внимание при использовании, это multi-curl. Он запускает операции Curl параллельно. Раздел Функции Curl на php.net документирует их. Я бы посоветовал посмотреть этот урок . Кто-то там, вероятно, написал объектно-ориентированную абстракцию curl и multi-curl.

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