|
|||
|
Скрипт Sitemap-генератор XMLPHP - скрипт Sitemap-генератор XML создает XML карту сайта на основе уже известных URL сайта и данных о последней модификации, регулярности обновления страницы и ее приоритета (обязательно только наличие URL). Sitemap-генератор XML точно разделяет информацию по файлам, при достижении заданных лимитов по кол-ву URL-адресов или размеру файла (согласно Функция sitemap_url_gen() приводит данные по каждому URL к XML формату. Обязательным параметром является только $url. В адресах страниц также заменяются некоторые символы на их аналоги, чтобы соответствовать стандартам XML. Если не указаны остальные параметры, то в XML карте сайта они не сохраняются. sitemap_url_gen() - функция приведения данных по отдельноу URL к XML-формату
<?php function sitemap_url_gen($url, $lastmod = '', $changefreq = '', $priority = '') { // http://petrenco.com/php.php?txt=119 $search = array('&', '\'', '"', '>', '<'); $replace = array('&', ''', '"', '>', '<'); $url = str_replace($search, $replace, $url); $lastmod = (empty($lastmod)) ? '' : ' <lastmod>'.$lastmod.'</lastmod>'; $changefreq = (empty($changefreq)) ? '' : ' <changefreq>'.$changefreq.'</changefreq>'; $priority = (empty($priority)) ? '' : ' <priority>'.$priority.'</priority>'; $res = ' <url> <loc>'.$url.'</loc>'.$lastmod.$changefreq.$priority.' </url>'; return $res; } ?>
Функция sitemap_file_save() создает файл или несколько файлов sitemap.xml. Обратите внимание: перед созданием новых файлов sitemap функция удаляет все существующие файлы: sitemap.xml, sitemap1.xml, ..., sitemapXXX.xml. Также, в функции используются стандартные функции PHP mb_substr() и mb_strlen(). В случае, когда применяется кодировка отличная от UTF8 и др. многобайтовых кодировок, например win-1251, следует использовать аналогичные стандартные функции PHP: substr() и strlen(). sitemap_file_save() - функция создания файла(ов) sitemap.xml
<?php function sitemap_file_save($data, $parm = array(), $max_url_in_file = 50000, $max_size_file = 10485760) { // http://petrenco.com/php.php?txt=119 $parm['url_counter_all'] = 0; $sitemap_file_name = 'sitemap'; $first_str = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $last_str = ' </urlset>'; if (!isset($parm['fp'])) { $parm['counter_files'] = (isset($parm['counter_files'])) ? $parm['counter_files'] : 1; $parm['cycling_protect'] = (isset($parm['cycling_protect'])) ? $parm['cycling_protect'] : 0; $parm['name_file'] = $sitemap_file_name.$parm['counter_files'].'.xml'; if ($parm['counter_files'] == 1) { $parm['name_file'] = $sitemap_file_name.'.xml'; $file_in_dir = scandir($_SERVER['DOCUMENT_ROOT']); $i = 0; $d_files = ''; foreach ($file_in_dir AS $val) { if (preg_match('~^'.$sitemap_file_name.'[0-9]{0,5}\.xml$~', $val)) { unlink($val); $d_files .= $val.', '; $i++; } } $d_files = mb_substr($d_files, 0, -2); $parm['log'][0] = 'Deleted '.$i.' file(s): '.$d_files.'.'; } $parm['fp'] = fopen($parm['name_file'], "w"); if (!$parm['fp']) exit('Cannot create file '.$name_file.'. Check access to file or parent directory.'); else { fwrite($parm['fp'], $first_str); $parm['size_counter'] = mb_strlen($first_str.$last_str); } } $parm['size_counter'] = $parm['size_counter'] + mb_strlen($data); if ($parm['size_counter'] <= $max_size_file OR $parm['cycling_protect'] == 1) { fwrite($parm['fp'], $data); $parm['url_counter']++; $parm['cycling_protect'] = 0; } else { fwrite($parm['fp'], $last_str); fclose($parm['fp']); unset($parm['fp']); $parm['size_counter'] = $parm['size_counter'] - mb_strlen($data); $parm['log'][$parm['counter_files']]['file'] = $parm['name_file']; $parm['log'][$parm['counter_files']]['size'] = $parm['size_counter']; $parm['log'][$parm['counter_files']]['urls'] = $parm['url_counter']; $parm['log'][$parm['counter_files']]['end'] = 'exceeded size counter'; $parm['counter_files'] ++; $parm['url_counter'] = 0; $parm['cycling_protect'] = 1; $parm = sitemap_file_save($data, $parm, $max_url_in_file, $max_size_file); return $parm; } if ($parm['url_counter'] >= $max_url_in_file OR $parm['end']) { $action_txt = ($parm['end']) ? 'end urls' : 'exceeded url counter'; if (empty($data)) $parm['url_counter']--; fwrite($parm['fp'], $last_str); fclose($parm['fp']); unset($parm['fp']); $parm['log'][$parm['counter_files']]['file'] = $parm['name_file']; $parm['log'][$parm['counter_files']]['size'] = $parm['size_counter']; $parm['log'][$parm['counter_files']]['urls'] = $parm['url_counter']; $parm['log'][$parm['counter_files']]['end'] = $action_txt; $parm['counter_files'] ++; $parm['url_counter'] = 0; } return $parm; } ?> Входящие и выходящие значения:
Функция sitemap_generator_log() формирует статистику отработки функции sitemap_file_save() в HTML формате. sitemap_generator_log() - функция формирования статистики по работе функции sitemap_file_save()
<?php function sitemap_generator_log($parm, $domain) { // http://petrenco.com/php.php?txt=119 $ret = ''; foreach ($parm['log'] AS $key => $val) { if ($key == 0) $ret = $val.'<br>'; else $ret .= $key.' <a href="'.$domain.'/'.$val['file'].'" target="_blank">'.$val['file'].'</a>: '.$val['size'].' байт; '.$val['urls'].' url. Окончание по событию: '.$val['end'].'.<br>'; $sum_url = $sum_url + $val['urls']; $sum_s = $sum_s + $val['size']; } $ret .= '<strong>Всего: записано '.$sum_url.' urls, распределено по '.$key.' фалам суммарным размером '.round($sum_s / 1024).'Кб.</strong><br><br>'; return $ret; } ?> Входящие данные для функции sitemap_generator_log().
На выходе - отчет по созданию карты сайта в фалах sitemap.xml. Ниже - скрипт для тестирования функций по созданию карты сайта в XML формате - sitemap.xml. Скрипт тестирования функций по созданию карты сайта в XML
<?php // UTF8 $test_url_generator = 100; $domain = 'http://example.com'; $changefreq_arr = array('always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'); $max_url_in_file = 35; $max_size_file = 10000000; for ($i = 1; $i <= $test_url_generator; $i++) { $url = $domain.'/php.php?text='.rand(1, ($test_url_generator * 5)).'&page='.rand(1,500); $lastmod = date('Y-m-d', time() + rand(-10000000, 10000000)); $changefreq = $changefreq_arr[rand(0, 6)]; $priority = '0.'.rand(0, 9); $xml_data = sitemap_url_gen($url, $lastmod, $changefreq, $priority); $parm = sitemap_file_save($xml_data, $parm, $max_url_in_file, $max_size_file); } $parm['end'] = 1; $xml_data = ''; $parm = sitemap_file_save($xml_data, $parm, $max_url_in_file, $max_size_file); echo '<html> <head> <title>Generator sitemap.xml</title> <meta charset="utf-8" /> </head> <body> '.sitemap_generator_log($parm, $domain).' </body>'; ?> // ТУТ НЕОБХОДИМО ВСТАВИТЬ КОД ТРЕХ ФУНКЦИЙ sitemap_url_gen(), sitemap_file_save() и sitemap_generator_log(). Использовать скрипт и функции, опубликованные в этой статье можно бесплатно по своему усмотрению в коммерческих и личных целях. Все вопросы по этому скрипту задавайте в комментариях к статье ниже. Опубликовано: 2012/02/06
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/php.php?txt=119" target="_blank">Скрипт Sitemap-генератор XML</a> 38163
Комментарии
Всё бы ничего, но скрипт выдаёт ошибки.
И у сайта 80 стр., а он выдаёт 1000 url. Скрипт протестирован - ошибок в нем нет - напишите какие именно ошибки выдает скрипт у Вас? Также этот скрипт рассчитан на интеграцию с "движком" сайта, т.е. скрипту необходимо передать то кол-во URL-адресов, которое Вы посчитаете за необходимое. Для каждого отдельного "движка" нужно написать скрипт, который будет выдавать все нужные URL сайта, а уже потом, с помощью моего скрипта Вы можете создать карту сайта.
работает нормально , то это че $imgd_cfg = $GLOBALS['imgd_cfg'];, а так спасибо!
да считает созданые урлы неправильно... Строку с $imgd_cfg - убрал, спасибо. А на счет подсчета - при тестировании у меня все считалось правильно - проверьте, возможно ошибка где-то у Вас.
Также, в функции используются стандартные функции PHP mb_substr() и mb_strlen(). В случае, когда применяется кодировка отличная от UTF8 и др. многобайтовых кодировок, например win-1251, следует использовать аналогичные стандартные функции PHP: substr() и strlen().
И ЕЩЕ http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=44538 им тож спасибо
Статья довольно старая, но, может, автор еще просматривает комментарии. Дело вот чем, я испробовал несколько скриптов такого рода, и у всех один недостаток, не описано как сделать исключения URL, потому что лезет всякий мусор, комментарии к статьям и прочее. Например, мне пригодилось бы исключить такую конструкцию http://site.ru/#
Итого имеем 4 отдельных скрипта, которые работают для генерации sitemap файла. Ну, а где информация о том, как все эти скрипты связать между собой? Или хотя бы, где ссылка чтобы скрипты скачать?
Помощь юзеру будет? есть сайт но как внедрить и запускать скрипт ..... или хотябы наводку где прочитать.
Спасибо заранее за ответ. Добавить комментарий
|