- PVSM.RU - https://www.pvsm.ru -
Новогодние праздники 666+666+666+6+6+6-го года в самом разгаре. За серьезные вещи совсем не хочется браться. Зато можно заняться всякими мелочами, до которых обычно не доходят руки. Такой мелочью для меня стала генерация файлов Sitemap.xml.
Sitemap.xml — это файл, содержащий в специальном формате ссылки на страницы сайта, которые должны быть проиндексированы поисковыми системами. Исчерпывающая информация о формате может быть найдена на Sitemaps.org [1].
Давно хотелось иметь удобный инструмент для формирования данных файлов.
Поиски в сети дали множество «удобных online-сервисов» для ручного создания карты сайта и несколько простеньких скриптов, которые также непригодны для создания карты сайта с большим количеством ссылок.
Чтобы сгенерировать sitemap.xml для небольшого сайта не нужно много усилий. Для больших же ресурсов есть особенности.
Существуют ограничения на размер файлов sitemap.xml в 10Мб, а также ограничения на в 50000 ссылок на один файл. Автоматическая обработка данных ограничений и стала моей целью.
Таким образом, были сформированы следующие требования:
Сказано — сделано. Конечный вариант скриптов можно найти по ссылке в конце статьи.
Чтобы предупредить дальнейшие вопросы скажу, что скрипт не является универсальным решением, которое в один чих сгенерирует карту для произвольного сайта.
Это лишь инструмент, и список ссылок, которые будут добавляться в файл, необходимо формировать самостоятельно, возможно, в несколько заходов.
Кроме того, скрипт не исправляет и не кодирует url, переданные ему. Поэтому позаботиться о соответствии ссылок стандарту RFC-3986 [2] для URI, стандарту RFC-3987 [3] для IRI и XML-стандарту [4].
С помощью данного инструмента карту сайта можно создавать примерно так:
<?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();
Автор: vasiatka
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/108170
Ссылки в тексте:
[1] Sitemaps.org: http://www.sitemaps.org
[2] RFC-3986: http://www.ietf.org/rfc/rfc3986.txt
[3] RFC-3987: http://www.ietf.org/rfc/rfc3987.txt
[4] XML-стандарту: http://www.w3.org/TR/REC-xml/
[5] Исходники скриптов генерации Sitemap.xml: http://a-develop.ru/catalog/product/5
[6] Репозиторий на github.com: https://github.com/vasiatka/sitemap.git
[7] Источник: http://habrahabr.ru/post/274557/
Нажмите здесь для печати.