Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Разбор Robots.txt
Этот пример класса, получающего и разбирающего файл robots.txt.
class robots
{
var $content = ''; # текст файла robots.txt
var $branches = []; # здесь храним ветки для разных User-Agent
# конструктор
# @url: адрес сайта или хост в произвольном формате
function robots($url)
{
# получаем файл robots.txt
$url = preg_replace('#^http://#is', '', trim($url));
$url = current(explode('/', $url));
$this->content = trim(file_get_contents('http://' . $url . '/robots.txt'));
# парсим полученные данные
$s = preg_split('#[\n]+#is', $this->content);
$current_user_agent = '';
foreach($s as $line)
{
$line = trim(current(explode('#', trim($line), 2)));
if (substr_count($line, ':')<1) continue;
$line = explode(':', $line, 2);
$current_directive = strtolower(trim($line[0]));
$current_value = trim($line[1]);
if ($current_directive == 'user-agent')
{
$current_user_agent = $current_value;
}
elseif($current_user_agent!='')
{
$this->branches[$current_user_agent][$current_directive][] = $current_value;
}
}
}
# получить значение заданной директивы для заданного агента
# @user_agent: агент
# @directive: имя директивы
# возвратит FALSE если директива не указана
function get_directive($user_agent, $directive)
{
$user_agent = strtolower($user_agent);
$directive = strtolower($directive);
$ret = [];
foreach($this->branches as $ua_mask=>$data)
{
if (($ua_mask=='*' || $user_agent=='*' || @preg_match('#'.preg_quote($ua_mask,'#').'#is', $user_agent)) && isset($data[$directive]))
{
$ret = array_merge($ret, $data[$directive]);
}
}
if (count($ret)>0) return array_unique($ret); else return FALSE;
}
# проверить, запрещен ли url к индексации
# @user_agent: агент
# @url: полный url для проверки
# возвратит TRUE если url запрещен
function check_disallow($user_agent, $url)
{
$url = preg_replace('#^http://#is', '', trim($url));
$url = explode('/', $url, 2);
$url = (count($url)>1) ? '/' . $url[1] : '/' . $url[0];
$url = trim($url);
$info = $this->get_directive($user_agent, 'Disallow');
foreach($info as $url_mask)
{
if (preg_match('#^'.preg_quote($url_mask, '#').'#', $url))
{
return true;
}
}
return false;
}
}
Смотрите также пример разбора файла robots.txt и проверки на соотвествие шаблону Disallow
.
Прокомментировать/Отблагодарить