В PHP, как я могу прочитать ненадежную веб-страницу?

Я пытаюсь использовать Curl в PHP для чтения ненадежной веб-страницы. Страница часто недоступна из-за ошибок сервера. Тем не менее, мне все равно нужно прочитать его, если он доступен. Кроме того, я не хочу, чтобы ненадежность веб-страницы выполняла мой код. Я бы хотел, чтобы мой PHP терпел неудачу и двигался дальше. Вот что я имею до сих пор:

<?php function get_url_contents($url){ $crl = curl_init(); $timeout = 2; curl_setopt ($crl, CURLOPT_URL,$url); curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); $ret = curl_exec($crl); curl_close($crl); return $ret; } $handle = get_url_contents ( 'http://www.mydomain.com/mypage.html' ); ?> 

Вы можете проверить HTTP-код, чтобы узнать, была ли страница успешно получена путем тестирования кода ответа HTTP. Я не могу вспомнить, если> 200 и <302 – правильные диапазоны кода, хотя и имеют быстрый пик в кодах ответов HTTP. Если вы используете этот метод.

 <?php function get_url_contents($url){ $crl = curl_init(); $timeout = 2; curl_setopt ($crl, CURLOPT_URL,$url); curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); $ret['pagesource'] = curl_exec($crl); $httpcode = curl_getinfo($crl, CURLINFO_HTTP_CODE); curl_close($crl); if($httpcode >=200 && $httpcode<302) { $ret['response']=true; } else { $ret['response']=false; } return $ret; } $handle = get_url_contents ( 'http://192.168.1.118/newTest/mainBoss.php' ); if($handle['response']==false){ echo 'page is no good'; } else { echo 'page is ok and here it is:' . $handle['pagesource'] . 'DONE.<br>'; } ?> 

Используйте это вместо этого, CURL больше не рекомендуется больше, как я слышал, так как PHP-обертки предлагают гораздо лучшую производительность и всегда доступны в любом месте:

 $currentcontext = stream_context_get_default(); stream_context_set_default(stream_context_create(array('timeout' => 2))); $content = file_get_contents('url', $context); stream_context_set_default($currentcontext); 

Это установит контекст потока по умолчанию на таймаут через 2 секунды и получит содержимое URL-адреса через обтекатель потока, который должен присутствовать во всех версиях PHP версии 5.2 и выше;

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