結論はタイトルの通りですが、苦労したので問題解決までの顛末を記録。
数年前、Wordpress及びサーバー周りのド素人(まあ今でも毛が生えた程度だが)だったころ、よく遭遇した「エラー500(Internal Server Error)」。
それが今頃再び悩まされるとは…。
久々に自宅サーバー(CentOS5+Blueonyx 改PHP5.1→5.3)を使いWorpdressを構築しようとしたところ、/wp-admin/install.phpにアクセスしようとするとエラー500が返ってくる。どうせ「パーミッションの問題でしょ」と簡単に考えていたら、そうは問屋が卸してくれない。ファイルの所有者(とグループ)、パーミッションをいろいろ変えてみたけどダメ。「これはきっと、.htaccessが悪さしてるに違いない!オレ、いいところに気づいた」なんて、まだ楽天的に解決できると思ったけど、.htaccessには何も記載されていなかったよ。これまでにWordpressのインストールは何十回もしているので、MySQLの設定やwp-config.phpの設定などの手順に間違いがあるとも思えない。
こうなると、サーバー側の設定に問題があるとしか思えない。
試しに、install.phpと同じディレクトリ内にphpinfo()
を書き込んだtest.phpを置いてみてアクセスしてみたら、ちゃんとPHP情報が表示される。PHPは動作している模様。
そもそも、同サーバー内の別の仮想サイトでは、Wordpressが元気に動いてらっしゃいます。
仮想サイトの新設時に何か不具合が生じたのかもと思い、さらに別仮想サイトを立ち上げて、再度Wordpressのインストールを試みても同じ症状。過去に同じサーバー内でのインストールはうまくいってる点が、ますます混乱を招いております。理由はともかくWordpressの最新バージョンに問題かな?とも思い、念のため、同サーバーにて過去インストール成功実績のある3.14で試したが、やはり同じエラー500が返されます。
どうなっているんだー。
そこで、地道な作業をしてみることに。以下の一行をいろんな場所に入れてみて、どこで引っかかるかチェックしてみます。
die("OK!");
ブラウザに「OK!」が表示されれば、その時点まではうまく動いている証拠。
install.phpの36行目
require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
ここまではちゃんと動いている様子。(37行目に挿入したdie("OK!");
までは動きます。)
が、39行目
require_once( dirname( __FILE__ ) . '/includes/upgrade.php' );
の直後にdie("OK!");
を入れると、「OK!」とは表示されずにエラー500が。
まずこの時点で、/includes/upgrade.phpの読み込みで何かトラブルが発生していることがわかりました。
次に/includes/upgrade.phpファイルで同じことを試してみます。(はぁ~、地道。もっと簡単な方法誰か教えて。)
で、/includes/upgrade.phpの16行目
require_once(ABSPATH . 'wp-admin/includes/admin.php');
でエラー。wp-admin/includes/admin.phpの読み込み中に問題。
次、wp-admin/includes/admin.phpの12行目
load_textdomain( 'default', WP_LANG_DIR . '/admin-' . get_locale() . '.mo' );
どうやらこいつが処理できずにエラーを吐いてる様子。
ということは、関数load_textdomain
が動いていないか、MOファイルの読み込みに失敗しているということか。
念のため12行目の直前に以下を挿入するとちゃんと正しいパスが表示されたので、パス指定は問題ない感じ。
//12行目の直前に入れて、パス指定が合っているか確かめる echo WP_LANG_DIR . '/admin-' . get_locale() . '.mo';
特にget_locale()
が気になったが、ちゃんと「ja」を返してきた。
うーん、ここでまた止まってしまった。このあとどうすればいいんでしょ。
ここで読み込もうとしているadmin-ja.moファイルはWordpressを日本語化する翻訳データ。これがないと英語で表示されるわけですが…。
とりあえず、PHPの処理がタイムアウトになっているのかなあと思い、PHP.iniをチェック。
max_execution_time = 30
別に30秒も待ってない。数秒でエラー表示がでるのでこの設定のせいでもなさそう。
そこで、さきほどの問題箇所、wp-admin/includes/admin.phpの12行目をコメントアウトしてみる。予想通りなら、英語でのインストール画面が表示されるはず。そうであってほしい。そうでなければ、もはやそれ以外の場所に原因究明を続けるメンタルパワーは残っておりません。
//↓コメントアウトしてみた //load_textdomain( 'default', WP_LANG_DIR . '/admin-' . get_locale() . '.mo' );
改めて、install.phpにアクセス。
おおっ、英語のインストール画面が出た!!
ということは、問題はadmin-ja.moの読み込みですね。
あ・・・、わかっちゃった気がしてきた・・・。いやな予感。
BlueonyxのPHP設定画面にて、メモリの上限割当設定をチェック。
16MB。
少ないよね。これ、きっと少ないよね。
試しにこれを48MBとかにしてみる。
そして、install.phpにアクセスしてみる。
何もなかったかのようにインストール画面が表示されましたとさ。チャンチャン。
暴れたい・・・。