WebARENA SuiteX V1タイプでも、ようやくPHP 5.6が使えるようになった。モジュールタイプでも提供されるので、WordPressなどのCMSはCGIタイプより高速に表示されるはず。
私もPHP 5.3(CGIタイプ)から切り替えてみたが、モジュールタイプはもちろん、CGIタイプでもWordPressのログイン画面が真っ白で表示されない。コンテンツ自体は正常に表示される。ログインしたあとの管理画面も正常に表示される。ログイン画面だけが表示されないのだ。
私は通常、example.com/wp-adminでログイン画面を表示させるのだが、これで真っ白になるため、example.com/wp/wp-login.phpでも確認したところ、このエラーメッセージが表示された。
キャッシュをクリアし、プラグインが邪魔しているのかと全部停止してみたがダメ。マルチドメイン運用で癖のあるWebARENA SuiteX自体のリダイレクトに問題があるのではと思ったが、デバッグモードで確認したら内部ソースのエラーだった。疑って失礼。PHP 5.3では大丈夫でも、PHP 5.6では表示されないことが本当にあるのだ。
私の対応手順は次のとおり。
- デバッグモードにする
wp-config.phpに下記を追記する。元々ある場合は、これに合わせる。
define('WP_DEBUG', false); if (WP_DEBUG) { // wp-content/debug.logファイルへのデバッグログ出力on/off define('WP_DEBUG_LOG', true); // エラーと警告のブラウザ出力の無効化 define('WP_DEBUG_DISPLAY', false); @ini_set('display_errors', 0); }
- ログイン画面が真っ白になるのを再現
- ログを確認
wp-content/debug.logが出来ているのでエディタで表示させる。「PHP Notice」のレコードが山のように出ていると思うが、致命的な「PHP Warning」のレコードだけ見ればよい。たぶん最終行にある。WebARENA SuiteXでマルチドメイン運用していたら、こんな感じだ。「999.999.999.999」はIPアドレス。
PHP Warning: Cannot modify header information - headers already sent by (output started at /virtual/999.999.999.999/home/sub1.example.com/wp/wp-config.php:1) in /virtual/999.999.999.999/home/sub1.example.com/wp/wp-includes/pluggable.php on line 1167
- BOM有になっていることを確認
これはwp-config.phpの1行目
<?php
の前に余計な文字や空白があり、wp-includes/pluggable.phpの1167行目が呼び出せないことを示している。しかし、wp-config.phpを普通に開いてもなにもない。文字コードUTF-8の場合、それを宣言するBOM(Byte Order Mark)と呼ばれる0xEF 0xBB 0xBF
の3バイトがファイル先頭に書き込まれることがあり、多くのエディタでは表示されないのだ。秀丸エディタで動作設定を変えて表示させてみると、タイトルバーに[BOM有]と表示された。メモ帳で編集すると、必ずBOMが付いてしまうらしい。*1 - BOM無でファイルを上書き
秀丸エディタで「BOMを付ける」チェックなしで保存し、FTPで上書きする。それも表示されないときは、これを繰り返す。ほかにメモ帳で編集した覚えのあるファイルがあれば、それを該当しているので直す。テーマのfunction.php、widgets.phpなどが編集しがちだ。
- デバッグモードを解除
ログイン画面が正常に表示されるようになったら、
define('WP_DEBUG', true);
をfalseに戻し、wp-content/debug.logを削除する。
<?php
の前にスペースが入ることがあるというのは、検索してすぐわかったが、ログイン画面が真っ白でもなにかしらのソースが書かれて途中で止まると思い込んでいたので、最初はリダイレクト関連かと思ってしまった。本件で最も参考になった先達サイトは「スタック・オーバーフロー」。
- [その他]⇒[動作環境]⇒[ウィンドウ]⇒左下の「上級者向け設定」をチェック⇒[高度なウィンドウ]⇒「エンコードの種類」を「常に表示+改行コード+BOMの有無」 [↩]