<広告>

PHP

PHPでXMLファイルを読み込む、書き込む

HTMLを手書きで頑張り、静的なWebサイトを運営しているあなた!

Webページは更新しても、検索エンジン用のサイトマップ(sitemap.xml)の更新日(lastmod)を変更するのを忘れていませんか?

私は、めちゃくちゃ忘れます!

私はロックバンドをやっており、そのバンドのWebサイトを手書きでHTMLを一生懸命頑張っています

▼そのバンドのサイトはこちら▼

https://vasofatum.jp

常々「検索用エンジンのサイトマップを自動で更新できないのか?」と奮闘中です!

今回、サイトマップ自動更新の何歩も手前の『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

<?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

<?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

<?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でXMLファイルを書き込む

PHPを使って https://vasofatum.jp のサイトマップのトップページの最終更新日を書き込んでみます!

simplexml_load_file」でオブジェクトに代入したものに、サイトマップの最終更新日を指定したいURLにヒットしたら、今日の日付をオブジェクトに代入し、「asXML」でXMLファイルに保存します。

PHP

<?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を書き込む前

▼PHP実行後

PHPでXMLを書き込んだ後

サイトマップのXMLファイルが書き込まれました!

あとは、自動で出来るようにするだけです!

<広告>

-PHP
-, , , ,