simplexml_load_fileでWordPressのRSSを読み込もうとしてエラーになった原因

この記事のURLとタイトルをコピーする

WordPressのRSSフィードをPHPで読むというプログラムをちょこっと書こうと思って、いきなりつまづきました。なぜかエラーが出てしまい、どのサイトで見つけたコードでも上手く行きません。
しかし、エラーメッセージで探してもなかなか同じような事例にあたらず。。結局分かった原因は、意外なところにありましたのでそれについて書きます。

simplexml_load_file でRSSフィードが読み込めなかった状況

こんな感じのコードを書きました。

これだけで、このblogのfeedを取得して内容を表示するはずです。(ブラウザでも見ることが出来ます→こちら)

しかし、実行してみたところ

こんなエラーが出てしまいました。該当している行は、simplexml_load_file を使っているところです。

URLがおかしいのかな?とか見直してみますが、ブラウザではそのときでもちゃんと表示されていたのでURLがおかしいということも無いと思いました。

うーん。。。試しにWordPressで作られていると思われる、他のサイトのFEEDのURL<を入れて、このプログラムで表示したところ、意図通りに表示されました。

同じWordPressのRSSフィードが表示されている、ブラウザでは表示されているけれど プログラムから自分のサイトのfeed取得しようとするとエラーに! なってしまいます(>_<)

simplexml_load_fileではなく、file_get_contentsで確認して原因が判明

何が原因かわからないのですがどうも Undefined index: HTTP_USER_AGENT って…、なんか普通にPHPでよく見るエラーのような。

ということで、file_get_contents で確認してみました。すると、

うっ… 

themes/twentyfourteen-ryus/functions.php on line 579

なんですと~(>_<)。自分が色々いじっているfunctions.phpで Undefined index: HTTP_USER_AGENT に関する、NoticeやWarningが発生しています。該当する行を見ると、

と、あります。これは…PHPを書く人なら心当たりのある「該当する配列が存在しないのに isset とかで存在を確認せずに、存在するものとして使ったときのワーニング」です。ブラウザからアクセスすればここには HTTP_USER_AGENT の配列が存在するはずですが、PHPから直接呼ばれるのでこの配列は存在しません。

そのためにワーニングメッセージが返されて、ワーニングメッセージはxmlじゃなから、simplexml_load_file がエラーという判定を下してしまうようです。

ということで、この行のコーディングを

こんな感じに変更して、無事、

simplexml_load_file を使って、RSSフィードを読み込むことに成功しました(^^)/

まとめ:functions.phpの利用は気をつけましょう!!!

と、自分が言うのもアレですが(^_^;、つい簡単に手が入れられるので色々追加してしまうfunctions.phpですが、今回のようにすべての場合に通るようなコードを書いた場合はワーニングも出ないように完璧な感じのコードにしておかないと、おもいがけないところでエラーが出てしまうので気をつけましょう!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

この記事のURLとタイトルをコピーする
スポンサーリンク
スポンサー広告
トップへ戻る

ゆうそうとについての説明

ゆうそうと とは東京都八王子市を中心として、WordPressによるWEBサイトの作成や、スポットでのIT相談を行ったり、年間契約でのIT顧問をなりわいとして活動しています。

特徴としては30年以上IT業界でプログラムを中心として仕事をしてきたものと、美大出身のデザイナーがワンストップで対応するため、幅広い対応が可能であることです。

IT相談は直接お会いしてのご相談の他、ZOOMによるオンライン相談も可能です。