ブログが”500 Internal Server Error”を吐いて困った

前のPDCAスピナーの記事は数日前に書いていたのだけれども、そもそも(久々に開いた)ブログが「500 Internal Server Error」を出してまともに表示できなくなっていて困りました。このブログはWordpressで構成しているのですが、現象からググってもなかなか原因がわからず難儀しました。

結論から言うとテーマファイルに含まれた記述が原因でした。

現象は、
– ブログトップにアクセスすると「500 Internal Server Error」が表示される
– スマホからは問題なく見られる (PCとAndroidタブレットからはダメ)
– ダッシュボード(管理画面)は見られる (更新はできない)
といったもの。

運悪くサーバー障害とぶつかっており、そっちが原因かと思って数日放置しましたが直らず。

データベースだけ残してWordpress自体の再インストールなどを試しましたが直らず。

もういやだ。

プラグインなどは問題なさそうで、テーマを変えたところ表示されました。というわけで絞り込み。

1. テーマに必要な最低限のファイルだけで試す

  index.php、style.cssだけをアップロード
  → 動く

2. 1ファイルずつアップロードしてく

  header.php以外をアップロード
  → 動く

  header.phpをアップロード
  → 再現

というわけでheader.phpに原因がありそう。更にheader.phpの記述を一旦全部コメントアウトし、少しずつ解除していきます。そこでようやく原因が判明。

どうも原因はheader.phpの先頭に記載された以下の記述のようです。

< ?php if (!(ereg("Windows",$_SERVER['HTTP_USER_AGENT']) && ereg("MSIE",$_SERVER['HTTP_USER_AGENT'])) || ereg("MSIE 7",$_SERVER['HTTP_USER_AGENT'])) {
echo '<?xml version="1.0" encoding="' . get_settings('blog_charset') .'"?>' . "\n";
} ?>

調べてみると、Wordpressではよく使われているxml宣言追加文のようでした。消しても動いたのですが、よくよく調べるとphpのバージョンアップとwordpressのバージョンアップと、それぞれ非推奨の記載方法になってようです。そういや最近サーバーが刷新されたとの知らせがあったな…。

今回は以下のeregが原因で500エラーになったっぽいです。矢印のように直すのが推奨のようです。
– PHPのバージョンアップによるもの: ereg → preg_match (今回はこれが原因)
– WordPressのバージョンアップによるもの: get_settings → get_option (今回の原因ではないが前者の関数は今は非推奨)

というわけで、以下のように書き換えて元通り動くようになりました。めでたしめでたし。

< ?php if (!(preg_match("Windows",$_SERVER['HTTP_USER_AGENT']) && preg_match("MSIE",$_SERVER['HTTP_USER_AGENT'])) || preg_match("MSIE 7",$_SERVER['HTTP_USER_AGENT'])) {
echo '<?xml version="1.0" encoding="' . get_option('blog_charset') .'"?>' . "\n";
} ?>

今回のコード記述でうまいことコード装飾ができていないことが分かったのでそのうちちゃんとCSSもいじりたい。

Filed under: 作業メモ — kirin 23:23
トラックバック

このエントリーのトラックバックURL:

コメントはまだありません »

No comments yet.

Leave a comment





(一部のHTMLタグを使うことができます。)