Как добавить проверку ответов сервера во многопоточном cURL?

Sergo_Sev

Творец
Регистрация
14 Июн 2008
Сообщения
578
Реакции
193
Нужно добавить проверку в скрипт - если сервер возвращает ошибку (например 502 и 404) то не записываем файл, а записываем только при получении ответа 200

PHP:
function multiRequest($data) {
// Массив для ресурсов соединения
$curls = array();
// Массив для результатов
$result = array();
// Инициализация мульти запроса
$mh = curl_multi_init();
// Задание параметров запроса
foreach ($data as $id => $d)
{

$curls[$id] = curl_init();
$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curls[$id], CURLOPT_URL,            $url);
curl_setopt($curls[$id], CURLOPT_HEADER,         false);
curl_setopt($curls[$id], CURLOPT_RETURNTRANSFER, true);

curl_multi_add_handle($mh, $curls[$id]);


}
// Выполняем запрос пока есть соединения
$running = null;
do
{
curl_multi_exec($mh, $running);
}
while($running > 0);
// Получаем данные и закрываем соединения


foreach($curls as $url_id => $content)
{

$str = curl_multi_getcontent($content);

        $file = fopen($url_id, 'w');
        fwrite($file, $str);
        fclose($file);

}
curl_multi_close($mh);
return $result;
}





$data = array(
  "AjdwhC4lGqY.jpg" => 'http://cs10656.vk.me/v10656915/3e4/AjdwhC4lGqY.jpg', // ФАЙЛ НЕ доступен
  "RULNqogANTU.jpg" => 'http://pp.vk.me/c9709/v9709308/49/RULNqogANTU.jpg',
);

$r = multiRequest($data);


Нашел вот такой пример, но так и не понял куда и как добавить проверку
PHP:
function get_web_page( $url )
{
  $ch = curl_init( $url );
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
  $content = curl_exec( $ch );
  $err     = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );
  $header['errno']   = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}


$result = get_web_page( "http://cs10656.vk.me/v10656915/3e4/AjdwhC4lGqY.jpg" );
if (($result['errno'] != 0 )||($result['http_code'] != 200)){
    echo $result['errmsg'];
}else{
    $page = $result['content'];
    echo $page;
}
 
Не вникая вообще, а только в то что вы хотите. А то только проснулся.
Вот так попробуйте
PHP:
foreach($curls as $url_id => $content){
      $str = curl_multi_getcontent($content);
      $header = curl_getinfo($content);
      if($header['http_code'] == 502 or $header['http_code'] == 404) continue;
      $file = fopen($url_id, 'w');
      fwrite($file, $str);
      fclose($file);
}
 
Назад
Сверху