Скрипт верификации сайта

Приветствую!
Предлагаю на обсуждения простой скрипт проверки принадлежности (верификации) сайта, его владельцу.

Предполагается, что владелец сайта поместил специальный meta тег в head секцию на корневой странице сайта, т.е. на home page.
Формат meta тега следующий:
<meta name="vf_key" content="29693426cfd334d8287783b49217e64f"/>

Задача определить наличие заданного meta тэга в заголовке документа, исключая весь остальной документ.

Функция верификации следующая:

PHP:
  1. /**
  2. * Function return true if verfication is successed
  3. *@param $url string - it is valid url address
  4. *@param $metaValue - string it is special code which placed as content for verification meta tag
  5. **/
  6.         public function verifyMetaTag($url, $metaValue)
  7.     {   
  8.         // we know what $url is valid url
  9.  
  10.                 //get html of the page with Zend http client
  11.         $client = new Zend_Http_Client($url, array(
  12.             'maxredirects' => 0,
  13.             'timeout'      => 30)
  14.         );
  15.         $response = $client->request();
  16.                 if (!$response){
  17.                        return false;
  18.                 }
  19.        
  20.         $html = $response->getBody();
  21.        
  22.         $headPos = strpos($html, '</head>');
  23.         $metaPos = strpos($html, $metaValue);
  24.  
  25.                 //close head section must be below our meta tag
  26.         if ($metaPos> $headPos){
  27.             return false;
  28.         }
  29.        
  30.         $htmlHead = substr($html, 0, $headPos);
  31.  
  32.                 //grab all meta tags in head section into array
  33.         preg_match_all("#<meta(.*)>#", $htmlHead, $matches);
  34.        
  35.                 //checking all meta tags on special key and value pairs
  36.         foreach ($matches[1] as $meta){
  37.                      //meta tag must have key "vf_key" and value "$metaValue"
  38.             if (strpos($meta, 'vf_key') && strpos($meta, $metaValue)){
  39.                 return true;
  40.             }
  41.         }
  42.         return false;
  43.     }

Есть ли у этого метода недостатки или может есть более простой вариант?

  1. Хм, можеь лучше использовать встроенные возможности самого языка програмирования
    http://ua.php.net/manual/ru/function.get-meta-tags.php

    var_dump(get_meta_tags("http://yandex.ru"));

  2. Ну якщо вже Zend юзається, то там є Zend_Dom для таких розваг.

  3. Спасибо за get_meta_tags(), век живи, век учись. :)

    А с Zend Dom я уже наигрался, либо он с head секцией не работает, либо он еще не стабилен.

    Пробовал следующими способами:
    //Объявление
    $dom = new Zend_Dom_Query($html);

    //запросы
    * $dom->query('head meta');
    * $dom->query('head');
    * $dom->query('html head');

    Любой из запросов всегда возвращал пустой ответ.

    Также пробовал запросы в стиле XPath, результат тот же.

  4. Потому что HTML код скорее всего не валидный. Для начала его следует пропустить через tidy
    http://us3.php.net/manual/en/book.tidy.php

  5. Necromant,
    поздравляю с ZCE, кстати я раньше тоже хотел сдать экзамен, но все время забрасывал. Сейчас, все таки решился дойти до конца и получить ZCE. ;-)

  6. Спасибо за подсказку с tidy.
    Надо будет попробовать решение с Dom.
    Хотя get_meta_tags здесь подойдет лучше.

  7. Yaroslav Vorozhko,
    Спасибо. Я тоже забрасывал 2 года все собирался сдать, наконец-то в этом году сдал. Вообще имхо экзамен по php5 дааавно устарел и абсолютно не интересен. Вот что по настоящему интерессно это экзамен ZCE ZF.
    На самом деле сдавать не так страшно как кажется.

  1. There are no trackbacks for this post yet.

Leave a Reply