file_get_contents и ошибка 404

Статус
В этой теме нельзя размещать новые ответы.

drawing4

Профессор
Регистрация
21 Ноя 2008
Сообщения
323
Реакции
37
Когда пробуешь получить содержимое веб-страницы а страницы такой не существует, file_get_contents выдает ошибку. Как ее избежать?

P.S. спинным мозгом чувствую что нужно http заголовки читать, но никогда не работал с ними, поэтому прошу помощи
 
Я бы предложил использовать cURL. Вот простейший пример функции, которая вернет содержимое страницы, если получит от удаленного сервера код 200, и ничего не вернет, если получит 404.
PHP:
function get_page($url){
        $agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9';
        $ch=curl_init();
        curl_setopt ($ch, CURLOPT_URL,$url );
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch,CURLOPT_VERBOSE,false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $page=curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        switch($httpcode){
                case '200':
                        return $page;
                break;
                case '404';
                        return false;
                break;
        }
}
echo get_page('http://ya.ru');
 
PHP:
@file_get_contents("неправильный урл");
 
Позволю себе добавить к ответу diavolic, если ТС совсем начинающий, что тут вся соль в операторе подавления ошибки - @.

Нет, автор не начинающий, просто когда надо не думается в нужном направлении. Почему-то полез в заголовки

Правду говорят, одна голова хорошо, а две некрасиво :)
 
PHP:
$Headers = @get_headers($url);
if(strpos($Headers[0], '200')) {

}
 
Нельзя учить использовать @ - это зло.
Если запрашиваемой страницы нет вообще, то возврат file_get_contents надо проверять на false.
Случай, если страница вернет код 200, описали выше.
 
Нельзя учить использовать @ - это зло.
Если запрашиваемой страницы нет вообще, то возврат file_get_contents надо проверять на false.
Случай, если страница вернет код 200, описали выше.

практически любой сервер сгенерит по 404 ошибке страницу и вернет ее в функцию file_get_contents. false функция вернет если будет обрыв связи или адрес будет такой, что там нет ни сервера ничего. если и проверять на отсутствие страницы, то использовать проверку хедеров на хттп ответы 100, 200 и 30х
 
во избежание дальнейшего флуда данная тема закрывается
понадобится добавить что-то конструктивное - пишите в личку, открою
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху