Создание XML-карты сайта с PHP

Я пытаюсь создать файл Sitemap, который будет автоматически обновляться. Я сделал что-то похожее на мой RSS-канал, но этот файл Sitemap отказывается работать. Вы можете просмотреть его в прямом эфире по адресу http://designdeluge.com/sitemap.xml. Я думаю, что основная проблема заключается в том, что он не распознает PHP-код. Вот полный источник:

<?php include 'includes/connection.php'; header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> <url> <loc>http://designdeluge.com/</loc> <lastmod>2010-04-20</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url> <url> <loc>http://designdeluge.com/about.php</loc> <lastmod>2010-04-20</lastmod> <changefreq>never</changefreq> <priority>0.5</priority> </url> <?php $entries = mysql_query("SELECT * FROM Entries"); while($row = mysql_fetch_assoc($entries)) { $title = stripslashes($row['title']); $date = date("Ymd", strtotime($row['timestamp'])); echo " <url> <loc>http://designdeluge.com/".$title."</loc> <lastmod>".$date."</lastmod> <changefreq>never</changefreq> <priority>0.8</priority> </url>"; } ?> </urlset> 

Проблема заключается в том, что динамические URL-адреса (например, те, что вытащили из БД) не генерируются, и карта сайта не будет проверяться. Благодаря!

EDIT: Прямо сейчас, я просто пытаюсь заставить сам код работать. Я настроил его как файл PHP на моем локальном сервере тестирования. Используется код выше. Сейчас ничего не отображается ни на экране, ни в источнике. Я думаю, что я сделал синтаксическую ошибку, но ничего не могу найти. Любая помощь приветствуется!

РЕДАКТИРОВАТЬ 2: Хорошо, я выяснил, что это ребята. По-видимому, мне пришлось отменить XML-объявление с помощью PHP. Окончательный код размещен выше. Спасибо за вашу помощь!

Related of "Создание XML-карты сайта с PHP"

Если вы посмотрите на sitemap.xml который сгенерирован (например, с использованием источника просмотра в вашем браузере) , вы увидите следующее:

 <?php header('Content-type: text/xml'); ?> <?xml version="1.0" encoding="UTF-8" ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http:/ ... 

<?php , присутствующий в этом выпуске, показывает, что PHP-код не интерпретируется .

Вероятно, это связано с тем, что ваш веб-сервер не распознает .xml как расширение файлов, содержащих PHP-код .

По крайней мере, два возможных решения:

  • Переконфигурируйте свой сервер, поэтому XML-файлы проходят через интерпретатор PHP (возможно, это не такая хорошая идея: это может вызвать проблемы с существующими файлами!)
  • Измените расширение своей карты сайта, например sitemap.php , поэтому оно интерпретируется вашим сервером.

Я бы добавил еще одно решение:

  • Имейте файл sitemap.php , содержащий код
  • И используйте RewriteRule, чтобы URL sitemap.xml фактически sitemap.php файл sitemap.php

При этом у вас будет URL sitemap.xml , который хорош (обязательно?) , Но поскольку код будет в sitemap.php , он будет интерпретироваться.

См. Mod_rewrite от mod_rewrite .

Я использовал код Уильяма (спасибо) и несколько небольших модификаций, которые он работал для меня.

Я думаю, что линия:

 header("Content-type: text/xml"); 

должна быть вторая строка после верхнего <?php

Кстати, это всего лишь небольшая точка для всех, кто ее копирует, но перед первым символом <?php в первой строке есть один пробел – если вы невольно копируете его, как я, вы потратите немного времени, пытаясь выяснить почему код не будет работать для вас!

Мне тоже пришлось немного подбирать заявление о выборе MySql.

Наконец, на выходе я использовал переменную $ domain, чтобы этот фрагмент кода можно было использовать в качестве шаблона без необходимости думать об этом (при условии, что вы используете одно и то же имя таблицы каждый раз). Variabe добавляется в файл connectdb.php, который включен для подключения к базе данных.

Вот моя рабочая версия кода Уильяма:

 <?php header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8" ?>'; include 'includes/connectdb.php'; ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> <url> <loc>http://www.DOMAIN.co.uk/</loc> <priority>1.00</priority> </url> <?php $sql = "SELECT * FROM pages WHERE onshow = 1 ORDER BY id ASC"; $result = mysql_query($sql,$conn); while($row = mysql_fetch_array($result)) { $filename = stripslashes($row['filename']); ?> <url> <loc>http://www.<?php echo "$domain"; ?>/<?php echo "$filename" ?></loc> <changefreq>monthly</changefreq> <priority>0.5</priority> </url> <?php } ?> </urlset> 

Лучшее решение – добавить в файл apache .htaccess следующую строку после RewriteEngine On

 RewriteRule ^sitemap\.xml$ sitemap.php [L] 

а затем просто имея файл sitemap.php в корневой папке, который обычно доступен через http://yoursite.com/sitemap.xml , URL-адрес по умолчанию, в который будут сначала искать все поисковые системы.

Файл sitemap.php должен начинаться с

 <?php header('Content-type: application/xml; charset=utf-8') ?> <?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?> 

оно работает 🙂