За последние 24 часа нас посетили 18352 программиста и 1643 робота. Сейчас ищут 1715 программистов ...

Проверить URL на наличие.

Тема в разделе "PHP для новичков", создана пользователем UFO_, 13 авг 2012.

  1. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
    Добрый день. Пытаюсь проверить URL на существование, но нормально не получается.

    Код (Text):
    1. function url_exists($url){
    2.         return (bool)preg_match('~HTTP/1\.\d\s+200\s+OK~', @current(get_headers($url)));
    3. }
    Такая функция дает нормально проверять урлы типа
    Код (Text):
    1. http://www.example/script.php
    А урлы с ЧПУ никак
    Код (Text):
    1. http://www.example/forum/
     
  2. mrdez

    mrdez Активный пользователь

    С нами с:
    3 июн 2012
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Латвия
    Код (Text):
    1.  
    2. $url = 'http://www.php.ru/';
    3. $headers = get_headers($url, 1);
    4. return 'HTTP/1.1 200 OK' === $headers[0];
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можешь ещё сделать print_r($headers) и посмотреть, что там приходит в ответе от сервера.
     
  4. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А если просто из браузера заходишь по тому самому адресу, который 403 Forbidden - то всё работает нормально?
     
  6. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
    sobachnik, да, все нормально.
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Тогда посмотри, какие заголовки отправляет браузер и отправляй в своём запросе такие же. Скорее всего, там не хватает нужного User-Agent.

    Добавлено спустя 8 минут 13 секунд:
    Попробуй добавить перед вызовом функции следующий код:
    Код (PHP):
    1. $opts = array(
    2.     'http' => array(
    3.         'method' => 'GET',
    4.         'user_agent' => 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.229 Version/11.61'
    5.     )
    6. );
    7. $default = stream_context_set_default($opts); 
     
  8. UFO_

    UFO_ Активный пользователь

    С нами с:
    29 фев 2012
    Сообщения:
    17
    Симпатии:
    0
    sobachnik, та же самая история.
    Похоже get_headers не может распознать index.php