@nevesomostjke

Как остановить загрузку контента Curl если сайт виснет?

Здравствуйте. Я вот гружу данные с ряда сайтов через curl_multi.
В нем есть один сайт, который постоянно зависает, раз через раз. То есть долго отдает данные. Из за этого, тормозится весь процесс загрузки всех остальных данных в потоке.
Вот мой код:
$urls = array(
        'site1' => 'siteurl1',
        'site2' => 'siteurl2'
    );

    $useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36';
    $timeout= 10;
    $dir            = dirname(__FILE__);
    $cookie_file    = $dir . '/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';

    $mh = curl_multi_init();
    
    foreach ($urls as $i => $url) {
        $conn[$i] = curl_init($url);
        curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($conn[$i], CURLOPT_HEADER, 0);        
        curl_setopt($conn[$i], CURLOPT_COOKIEFILE, $cookie_file);
        curl_setopt($conn[$i], CURLOPT_COOKIEJAR, $cookie_file);    
        curl_setopt($conn[$i], CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($conn[$i], CURLOPT_USERAGENT, $useragent);
        curl_multi_add_handle($mh, $conn[$i]);        
    }
    
    do {
        $status = curl_multi_exec($mh, $active);
        if ($active) {
            curl_multi_select($mh);
        }
        while (false !== ($info = curl_multi_info_read($mh))) {
            //var_dump($info);
        }
    } while ($active && $status == CURLM_OK);
    
    foreach ($urls as $i => $url) {
        $res[$i] = curl_multi_getcontent($conn[$i]);
        curl_close($conn[$i]);
    }
    
    foreach ($res as $key =>$value ) {
        file_put_contents('data/'.$key.'_list.json', $res[$key]);
    }


Вопрос, как сделать проверку, чтобы если один из сайтов грузится более 1 секунды, он пропускался?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы