Проверка ссылок средствами PHP

Проверка внешних ссылок на доступность средствами PHP – это самый простой способ уберечь страницы сайта от битых исходящих ссылок. Один из распространенных источников появления не рабочих URL’ов является форма добавления комментариев к записям. Именно в комментариях, чаще всего встречаются ссылки ведущие в никуда. А такие ссылки, как известно, подрывают доверие к сайту со стороны поисковых систем.

Проверить доступность сайта с помощью PHP очень легко. Для этого в PHP 5 есть уже готовая функция, которая замечательно справляется с этой задачей. 
get_headers() – возвращает массив заголовков, которые сервер отправляет при запросе.

Вот как это выглядит на конкретном примере:

Проверка URL: http://google.ru
<?php
	$domain = 'http://google.ru';

	$status=get_headers($domain);

	foreach($status as $st) {

	    echo $st.'
'; } ?>

Результат работы данного PHP скрипта выведет список всех заголовков ответа сервера по которым можно судить о доступности сайта.

  1. HTTP/1.0 301 Moved Permanently
  2. Location: http://www.google.ru/
  3. Content-Type: text/html; charset=UTF-8
  4. ----------------------------
  5. ----------------------------
  6. HTTP/1.0 200 OK
  7. ----------------------------
  8. ----------------------------

Не буду описывать каждый заголовок, а остановлюсь на одном:
HTTP/1.1 200 OK(для протокола 1.1) или HTTP/1.0 200 OK(для протокола 1.0)  если в массиве присутствует один из этих параметров, то можно с уверенностью сказать, что ссылка рабочая и ведет на конкретную страницу веб ресурса.

Казалось бы, всё просто, но есть один нюанс, который на сегодняшний день нельзя оставить без внимания. Это домен в зоне .рф. Дело в том, что функция get_headers() не понимает url’ов на кириллице. Поэтому если проверять URL на кириллице (МойСайт.РФ), то функция вернет FALSE и проверка внешней ссылки завершится ошибкой уровня E_WARNING.

Ну а поскольку, мы живем в Российской Федерации, и домены национальной зоны встречаются всё чаще и чаще, то PHP скрипт проверки ссылок на сайте, необходимо усовершенствовать. Для этого нам потребуется Punycode – конвертация.

– это конвертация символов в кодировке Unicode в формат, поддерживаемый инфраструктурой DNS. Алгоритм преобразования описан в стандарте RFC 3492.
Чтобы IDN(Интернационализованные доменные имена)-домен после преобразования нельзя было спутать с обычным доменом, все IDN-домены начинаются со специального префикса «XN--».
Для пользователей Рунета, которые первыми получили возможность регистрации и использования в своих проектах IDN-доменов в кириллической зоне .РФ, Punycode-преобразование применяется не только к имени домена, но и к зоне (домен верхнего уровня – .РФ). Псевдонимом, прописанным в DNS, для домена .РФ является сочетание символов «XN--P1AI». Таким образом, кириллический домен «МойСайт.РФ» после Punycode-преобразования будет выглядеть «XN--80ARBJKTJ.XN--P1AI».

На сайте www.phpclasses.org скачиваем файл «idna_convert.class.php» и подключаем к нашему PHP скрипту по проверке ссылок на доступность.

Теперь после проверки на наличие символов кириллицы в проверяемом URL  выполняем Punycode-преобразование.

Готовый PHP скрипт для проверки URL:

<?php

	$domain = 'http://google.ru';

	if(preg_match('/[^0-9a-z-_A-Z:/.]/is', $domain)!=0){

	    include("idna_convert.class.php");

	    $IDN = new idna_convert(array('idn_version' =----> '2008'));

	    $domain=$IDN->encode($domain);

	}

	$status=get_headers($domain);

	if(in_array("HTTP/1.1 200 OK", $status) or in_array("HTTP/1.0 200 OK", $status)){

	    echo $domain.' - доступен';

	}

?>

Проверить данный PHP скрипт в действии можно в нижеприведенной форме.

Проверка URL

     
 

Комментарии по теме: "Проверка ссылок средствами PHP".

  1. автор Максим

    А как сделать чтоб проверялась ссылка на определенной странице ? Скажем на такой то странице, по такому адресу, есть текст в котором ссылка, как узнать есть она там и открытая она для индексации ? Спасибо !

  2. автор Админ

    Всё правильно! Значит страница по такому адресу существует.

  3. автор Александр

    если ввести http://gHoogle.ru пишет все ок

  4. автор Админ

    Спасибо, поправил. Сейчас все работает без ошибок.

  5. автор Дмитрий

    Думаю 'idn_version' =----> '2008' это всё-таки 'idn_version' => '2008'
    Кстати, код выдает ошибку:
    Warning: preg_match() [function.preg-match]: Unknown modifier ']' in Z:\home\test1.ru\www\test-site\index.php on line 3

  6. автор Админ

    Большая просьба, оставлять сообщения только по данной теме. Спам, реклама и т.д. будут удаляться.

Добавить комментарий