За последние 24 часа нас посетили 60624 программиста и 1743 робота. Сейчас ищут 912 программистов ...

Проверка URL-ов на доступность

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

  1. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    Здравствуйте!
    2 дня уже не могу нормально сделать.. сокеты, разные темы читал в интете..
    Не надо писать сюда сообщения плана "fsockopen" в виде ссылки на опиание функции.
    Тема такая: есть массив с ссылками, надо каждую ссылку прогнать и вытаскивая тайтл, сравнивать его с '404 NOt found'
    Ибо сайт на битриксе, и статус страниц всех "200 ОК".
    Заранее спасибо за помощь..
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    делал же, вроде. http://php.ru/forum/viewtopic.php?t=13398
    не довёл до ума?

    PHP:
    1.  
    2. <?php
    3. $page = 'phpinfo.html';
    4.  if ($f = fsockopen('php.ru', 80)) {
    5.      fputs($f, "HEAD /$page HTTP/1.1\r\n");
    6.      fputs($f, "Host: php.ru\r\n");
    7.      fputs($f, "Connection: Close\r\n\r\n");
    8.  
    9.      $str = fgets($f, 1024);
    10.      echo 'Страница '.$page. ((!strpos($str,'404'))?' ':' не ').'существует';
    11.      fclose($f);
    12.  }
    13. ?>
    14.  
    цикл сам сделаешь?
     
  3. GudGuy

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

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    я бы посоветовал ещё редиректы считать=)
     
  4. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    Luge, да у меня просто $page в другой кодировке было.. как перевест нормально не наш способа. спасибо большое за помощь. цикл - построю..
     
  5. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    Дело в том, что 200 ОК ответ всегда и 404 там нет в статусе :\
     
  6. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    PHP:
    1.  
    2. $link = $arURL[10]['LINK'];
    3. $arLink = explode('site.ru/', $link);
    4. $page = $arLink[1];
    5.  
    6. echo $page;
    7.  
    8. if ($f = fsockopen('www.site.ru', 80)) {
    9.     fputs($f, "HEAD /$page HTTP/1.1\r\n");
    10.     fputs($f, "Host: [url=http://www.site.ru]www.site.ru[/url]\r\n");
    11.     fputs($f, "Connection: Close\r\n\r\n");
    12.  
    13.     $arSock = array();
    14.  
    15.     while (!feof($f)) {
    16.         $arSock[] = fgets($f, 1024);
    17.     }
    18.    
    19.     fclose($f);
    20.    
    21.     echo "<pre>"; print_r($arSock); echo '</pre>';
    22. }
    23.  
    у меня получается так, что если есть страница, то массив выводиться большой, каунт больше 8, а елси страницы нет, то каунт 8. Вот так я и определяю страница есть или нет. но трудность опять всё та же.

    PHP:
    1. fputs($f, "HEAD /$page HTTP/1.1\r\n");
    каунт массива меньше 8, а если подставим значение $page в ручную:

    PHP:
    1. fputs($f, "HEAD /about/form.php HTTP/1.1\r\n");
    то выводиться массив, в котором каунт больше 8 (страница существует)

    ох :\

    Если сравнить md5 хэши, $page (сюда значение из массива, который формируется из file.xml (в UTF-8 кодировке)) и значение переменной $page, то хэши разные.

    Есть идеи у кого-нибудь?
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    тогда только забирать всю страницу и проверять в <title> 404
     
  8. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    мм.. а всю страницу: @file('http://*/8.php'), а потом имплоде. у меня такое не работает. как ещё можно?
     
  9. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    Помогите, добрые кодеры :) как ещё можно вытащить страницу полностью и извлечь <title>. даже просто строку тайтла вытащить эту, а регулярку я сам сделаю..
     
  10. Антон Т.

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

    С нами с:
    11 авг 2008
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    г. Красногорск
    помогите О_о
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    http://php.net/fopen
    http://www.php.net/file_get_contents
    любой из этих функций можно получить содержимое удалённой страницы.
    Но если в php.ini allow_url_fopen выключен, то ничего не получится.