ブログが”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もいじりたい。
No comments yet.