HTMLを手書きで頑張り、静的なWebサイトを運営しているあなた!
Webページは更新しても、検索エンジン用のサイトマップ(sitemap.xml)の更新日(lastmod)を変更するのを忘れていませんか?
私は、めちゃくちゃ忘れます!
私はロックバンドをやっており、そのバンドのWebサイトを手書きでHTMLを一生懸命頑張っています!
▼そのバンドのサイトはこちら▼
常々「検索用エンジンのサイトマップを自動で更新できないのか?」と奮闘中です!
今回、サイトマップ自動更新の何歩も手前の『PHPを使ってXMLファイルを読み込む、書き込む』方法をご紹介します。
「外部APIのレスポンスがXML形式だけど、どうやってデータを取得すればいいの?」
「RSSフィードを読み込んで、自分のサイトに最新記事一覧を表示させたい!」
という時にも使えます。
投稿者「みか」自己紹介

- パソコンとデータベースが大好き
- 自社でネットワーク・システム・機器管理、Webサイト構築
- 自社向けのシステムをMicrosoft AccessやPHPで多数構築
- Excelでの作業はVBAを使って効率化
- ロックバンド「VARS」でベース担当
- 「VARS」のWebサイト、ブログも構築
- 「VARS」のライブを観に来てね!https://vasofatum.jp/live/
PHPでXMLファイルを読み込む
XMLファイルを読み込むには「simplexml_load_file」を使うと良い!
【基本】「simplexml_load_file」基本コード
「simplexml_load_file」は、XMLファイルをパースし、オブジェクトに代入してくれます。
<?php
// 「data.xml」のファイルが存在する場合
if (file_exists('data.xml')) {
$xml = simplexml_load_file('data.xml');
print_r($xml);
// 「data.xml」のファイルが存在しない場合
} else {
exit('data.xmlが見つかりません');
}
?>
戻り値
SimpleXMLElementクラスのオブジェクトを返します。
XMLドキュメント内のデータをプロパティに含みます。
失敗した場合に「false」を返します。
【応用】オブジェクトから配列へ変換するテクニック
「オブジェクトのままだと扱いづらい!配列(Array)にしたい」と感じている方も多いと思います。
私も同じ!!配列の方が使いやすい!
とっても簡単に配列に変換するには、「json_encode」を使うと、再帰的にすべての要素を配列に変換できます。
<?php
$filename = 'sitemaps.xml';
if (!file_exists($filename)) {
exit($filename.'を開けません。');
}
$xml = simplexml_load_file($filename);
// オブジェクトを一度JSONにし、それを連想配列としてデコードする
$array = json_decode(json_encode($xml), true);
// これで通常の配列として操作可能!
echo $array['url'][0]['loc'];
PHPファイルにアクセスすると配列で表示されました。

【実践】「simplexml_load_file」を使ってWebサイトのサイトマップを読み込む
https://vasofatum.jp のサイトマップをPHPを使って読み込んでみます!
下記PHPファイル「sitemap_road.php」はサイトマップ「sitemap.xml」を読み込んでくれます。
「sitemap_road.php」と「sitemap.xml」は、同じディレクトリに保存しています。
<?php
$filename = 'sitemaps.xml';
if (!file_exists($filename)) {
exit($filename.'を開けません。');
}
$xml = simplexml_load_file($filename);
foreach($xml->url as $data){
echo "【loc】" . $data->loc ."<br>";
echo "【lastmod】" . $data->lastmod ."<br>";
echo "【changefreq】" . $data->changefreq ."<br>";
echo "【priority】" . $data->priority ."<br>";
echo "<br>";
}
PHPファイルにアクセスすると表示されました(^O^)

PHPでXMLファイルを書き込む
PHPを使って https://vasofatum.jp のサイトマップのトップページの最終更新日を書き込んでみます!
「simplexml_load_file」でオブジェクトに代入したものに、サイトマップの最終更新日を指定したいURLにヒットしたら、今日の日付をオブジェクトに代入し、「asXML」でXMLファイルに保存します。
<?php
// 今日の日付
$todayDate = date("Y-m-d");
$filename = 'sitemaps.xml';
$xml = simplexml_load_file($filename);
foreach($xml->url as $url){
if($url->loc == "https://vasofatum.jp/"){
$url->lastmod = $todayDate;
}
}
$xml->asXML($filename);
echo "終了";
▼PHP実行前

▼PHP実行後

サイトマップのXMLファイルが書き込まれました!
あとは、自動で出来るようにするだけです!