拡張子xmlをPHPで実行して「sitemap.xml」を出力 | なんかいろいろ備忘録

拡張子xmlをPHPで実行して「sitemap.xml」を出力

PHPで出力したsitemap.xmlを表示 プログラミング

ローカル環境(ラズベリーパイ)で、WordPressを使わずにHTML(厳密にはPHP)で書いてサイトを作っているのですが、サイトマップXMLをPHPで出力して自動化したいと考えました。

環境

  • RaspberryPi
  • Apache:2.4.25
  • PHP:7.0.33
スポンサーリンク

拡張子xmlの「sitemap.xml」をPHPで実行

ページのURL一覧をcsvに書いて、それをPHPで処理して「sitemap.xml」に出力します。

csv

/URL1,タイトル1
/URL2,タイトル2
/URL3,タイトル3

サイトのページタイトルをCSVを読み込んで表示させているのですが、同じcsvを使ってサイトマップも出力したら、ページの追加や更新で「sitemap.xml」を編集しなくて済みます。

PHPは拡張子「html」で実行してるので.htaccessに「.xml」を書き足すだけでした。

.htaccess

AddType application/x-httpd-php .php .html .xml

ブラウザで表示を確認。

PHPで出力したsitemap.xml
PHPで出力したsitemap.xml

テキストが表示されるが色分けされていない。ソースも確認してみる。

sitemap.xml

<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
<loc>
/
</loc>
<lastmod>
2019-11-28T09:30:26+09:00
</lastmod>
<priority>0.8</priority></url>
<url>
<loc>
/cycling-road/saigawa-cycling/
</loc>
<lastmod>
2019-11-28T09:30:20+09:00
</lastmod>
<priority>0.8</priority></url>
</urlset>

ソースは問題なさそうに見えるが、sitemap.xmlの表示が色分けされていないのに違和感。

sitemap.xmlの書き方はこちらを参考。

murashun.jp
404 Page Not Found

そこで、.htaccessに「.xml」を削除した。

.htaccess

AddType application/x-httpd-php .php .html

ブラウザでの表示で色が変わったがPHPで書いた文もそのまま表示される。

[<?php print(‘hogehoge’);) ?>]

これでは意味がない。

調べていたらHTTPヘッダーが「text/xml」になっている必要があるのが分かった。

.htaccess:XMLファイルをPHPとして動かす | ARTICLE | goma
.htaccess:XMLファイルをPHPとして動かす方法をご紹介します。web知識を、インクリメント

Chromeのデベロッパーツールでヘッダー確認。

デベロッパーツールでHTTPヘッダー確認
デベロッパーツールでHTTPヘッダー確認

案の定、[Contents-Type:text/html]になっている。なので、参考にした上記サイトの方法を試して「.htaccess」を編集したが、[text/html]のまま変わらず。

そこで、PHPでHTTPヘッダーを設定できないか、また調べてみる。

[ PHP ] ブラウザに xml やテキストをそのまま出力 ( Content-Type / Content-Disposition ) – 偏差値40プログラマー

HTTPヘッダーをxmlに変えるを参考。.htaccessは最初の「AddType application/x-httpd-php .php .html .xml」の状態に戻した。

php

header("Content-Type: text/xml");
header("Content-Disposition: inline");

これで表示確認。

PHPで出力したsitemap.xmlを表示
PHPで出力したsitemap.xmlを表示
sitemap.xmlのHTTPヘッダー確認
sitemap.xmlのHTTPヘッダー確認

Contents-Typeが[text/xml]に変わった。

スポンサーリンク

まとめ

単純に拡張子がxmlでいいのかと思いましたが、HTTPヘッダーのContents-Typeも「xml」に設定しないと駄目でしたね。

PHPなら「header」関数で設定できます。

タイトルとURLをコピーしました