Новогодние праздники 666+666+666+6+6+6-го года в самом разгаре. За серьезные вещи совсем не хочется браться. Зато можно заняться всякими мелочами, до которых обычно не доходят руки. Такой мелочью для меня стала генерация файлов Sitemap.xml.
Sitemap.xml — это файл, содержащий в специальном формате ссылки на страницы сайта, которые должны быть проиндексированы поисковыми системами. Исчерпывающая информация о формате может быть найдена на Sitemaps.org.
Давно хотелось иметь удобный инструмент для формирования данных файлов.
Поиски в сети дали множество «удобных online-сервисов» для ручного создания карты сайта и несколько простеньких скриптов, которые также непригодны для создания карты сайта с большим количеством ссылок.
Что хотим?..
Чтобы сгенерировать sitemap.xml для небольшого сайта не нужно много усилий. Для больших же ресурсов есть особенности.
Существуют ограничения на размер файлов sitemap.xml в 10Мб, а также ограничения на в 50000 ссылок на один файл. Автоматическая обработка данных ограничений и стала моей целью.
Таким образом, были сформированы следующие требования:
- Скрипт должен следить за размером получаемых файлов и количеством добавленных url. При необходимости, создавать несколько файлов в соответствии с форматом;
- Не хранить промежуточные данные в памяти;
- Создавать по необходимости сжатые версии файлов, для отдачи с помощью nginx;
- Автоматически выполнять простейшие проверки данных.
Сказано — сделано. Конечный вариант скриптов можно найти по ссылке в конце статьи.
Чего не делает скрипт?
Чтобы предупредить дальнейшие вопросы скажу, что скрипт не является универсальным решением, которое в один чих сгенерирует карту для произвольного сайта.
Это лишь инструмент, и список ссылок, которые будут добавляться в файл, необходимо формировать самостоятельно, возможно, в несколько заходов.
Кроме того, скрипт не исправляет и не кодирует url, переданные ему. Поэтому позаботиться о соответствии ссылок стандарту RFC-3986 для URI, стандарту RFC-3987 для IRI и XML-стандарту.
Пример
С помощью данного инструмента карту сайта можно создавать примерно так:
<?php require_once(dirname(__FILE__)."/../common.inc.php"); set_time_limit(0); ini_set('memory_limit', '128M'); $dir = dirname(__FILE__);//document root path $tmp_dir = dirname(__FILE__);//temp path $base_url = 'http://mysite.ru/';//url with sitemaps (http://mysite.ru/sitemap.xml) $gzip = true; $config = array('path' => $dir , 'tmp_dir'=>$tmp_dir,'base_url'=>$base_url,'gzip'=>$gzip, 'gzip_level'=>9); $builder = new SitemapBuilder($config); $time = time(); $builder->start(); $builder->addUrl($base_url,$time,1.0); $builder->addUrl($base_url."news",$time,1.0); /* //this is example adding url $documents = News::find(array('criteria'=>'is_published=1')); foreach($documents as $document) $builder->addUrl($document->getUrl(),$document->getUtime(),0.8); */ $builder->commit();
Ссылки
ссылка на оригинал статьи http://habrahabr.ru/post/274557/
Добавить комментарий