file_get_contents и ошибка 404

Тема в разделе "PHP", создана пользователем drawing4, 13 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. drawing4

    drawing4

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

    P.S. спинным мозгом чувствую что нужно http заголовки читать, но никогда не работал с ними, поэтому прошу помощи
     
  2. Grohman

    Grohman Писатель

    Регистр.:
    19 мар 2010
    Сообщения:
    4
    Симпатии:
    3
    Я бы предложил использовать 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 ($chCURLOPT_URL,$url );
            
    curl_setopt($chCURLOPT_USERAGENT$agent);
            
    curl_setopt ($chCURLOPT_RETURNTRANSFER1);
            
    curl_setopt ($ch,CURLOPT_VERBOSE,false);
            
    curl_setopt($chCURLOPT_TIMEOUT5);
            
    $page=curl_exec($ch);
            
    $httpcode curl_getinfo($chCURLINFO_HTTP_CODE);
            
    curl_close($ch);
            switch(
    $httpcode){
                    case 
    '200':
                            return 
    $page;
                    break;
                    case 
    '404';
                            return 
    false;
                    break;
            }
    }
    echo 
    get_page('http://ya.ru');
     
    Sankaboy и drawing4 нравится это.
  3. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    PHP:
    @file_get_contents("неправильный урл");
     
    drawing4 нравится это.
  4. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Позволю себе добавить к ответу diavolic, если ТС совсем начинающий, что тут вся соль в операторе подавления ошибки - @.
     
  5. drawing4

    drawing4

    Регистр.:
    21 ноя 2008
    Сообщения:
    323
    Симпатии:
    37
    Нет, автор не начинающий, просто когда надо не думается в нужном направлении. Почему-то полез в заголовки

    Правду говорят, одна голова хорошо, а две некрасиво :)
     
  6. swer

    swer

    Регистр.:
    15 июн 2008
    Сообщения:
    306
    Симпатии:
    38
    PHP:
    $Headers = @get_headers($url);
    if(
    strpos($Headers[0], '200')) {

    }
     
    drawing4 нравится это.
  7. AtomZap

    AtomZap Писатель

    Регистр.:
    7 сен 2010
    Сообщения:
    6
    Симпатии:
    1
    Нельзя учить использовать @ - это зло.
    Если запрашиваемой страницы нет вообще, то возврат file_get_contents надо проверять на false.
    Случай, если страница вернет код 200, описали выше.
     
  8. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    практически любой сервер сгенерит по 404 ошибке страницу и вернет ее в функцию file_get_contents. false функция вернет если будет обрыв связи или адрес будет такой, что там нет ни сервера ничего. если и проверять на отсутствие страницы, то использовать проверку хедеров на хттп ответы 100, 200 и 30х
     
  9. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    во избежание дальнейшего флуда данная тема закрывается
    понадобится добавить что-то конструктивное - пишите в личку, открою
     
Статус темы:
Закрыта.