普段はあまり気づかないのですがある日RSSの出力がおかしくなっている事があります。その場合の対処方法を再現しながら記述していこうと思います。
問題の発覚から対処までの流れ
発覚
あるサイトから縁あってPHPでRSSを取得する機会がありました。
単純に新着記事を取得したいとのお話だったのですがドメインが違ったものですからRSSを取得してこようと考えました。
ところがそこでRSSが取得できないことに気づきました。表示された再現エラーは下記のものです。
Warning: simplexml_load_file(): https://kouri2ka.work/feed:6: parser error
パーサーエラー。
確認
まずは心を落ち着かせてブラウザでRSSのURLを開いてみます。
WordPressのRSSはディレクトリを変更していなければデフォルトで下記のアドレスです。
ドメイン直下の場合
https://自分のドメイン/feed
サブディレクトリ(blog)などの場合
https://自分のドメイン/blog/feed
表示されます。表示されますが、何だか余分な改行がいるようです。
念の為W3Cのバリデーターにかけてみます。
W3C Feed Validation Service, for Atom and RSS
https://validator.w3.org/feed/
やっぱりパーサーエラー出てます。明らかに5行もの空白行があることがわかるので、どこかで余分な改行が入ってしまっているようです。
調査
WordPressでRSS出力しているファイルは、自作テーマなどで改変している場合もあるとは思いますが一般的にはwp-include フォルダ内にある「feed-rss2.php」なので通常は触らない場所だと思います。
そうすると、テーマ内の何れかのファイルかプラグインの類の可能性があります。
とりあえず状況を説明してRSS出力側のWordPressへログインさせていただきました。そのサイトはプラグインの数が多かったので、まず最初にテーマ内のファイルを順に見ていきました。
とりあえずはテーマエディター上から見ていくと「functions.php」が改行されていました。
これが原因の可能性が高いです。修正してダメなら他のファイルを細かくみていきます。
対処
FTPで接続して、念の為バックアップを取得後に「functions.php」ファイルの差し替えを行います。
ただ単に改行を削除した元のファイルですが、バックアップをとる癖は必要です。ついでに全角のスペースがないかなども確認。
アップロードしブラウザで確認。
ブラウザでそのまま見るとキャッシュの兼ね合いでわからないのでキャッシュを無視したリフレッシュをします。
クロームならCtrl+Shift+Rですね。
正常にRSSが出力されることが確認できました。
再度W3Cのバリデーターにかけてみます。
無事に通過しました。
PHP側からも正常に取得できることが確認できたので、ひとまず落着です。
まとめ
空行がないかfunctions.phpをまず確認。
PHP開始タグの前に何らかの入力がある場合はPHPはそれを出力してしまいます。
RSSが異常をきたすだけでなく他にも影響が出るので、テーマ内のファイルを修正する時は慎重に行いましょう。他にもネットで探すとRSS出力異常はいろいろ原因があるようなので遭遇したらまた追記しようかと考えてます。