WebARENA SuiteXでPHP 5.6にしてWordPressログイン画面が真っ白になった場合の対応


この記事は2019年1月に掲載されたものです。
状況が変わったり、リンク先が変わっている可能性があります。

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では表示されないことが本当にあるのだ。

私の対応手順は次のとおり。

  1. デバッグモードにする

    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);
    }
    
  2. ログイン画面が真っ白になるのを再現

  3. ログを確認

    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
    
  4. 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有]を確認

  5. BOM無でファイルを上書き

    秀丸エディタで「BOMを付ける」チェックなしで保存し、FTPで上書きする。それも表示されないときは、これを繰り返す。ほかにメモ帳で編集した覚えのあるファイルがあれば、それを該当しているので直す。テーマのfunction.php、widgets.phpなどが編集しがちだ。

    秀丸エディタで[BOM無]で保存

  6. デバッグモードを解除

    ログイン画面が正常に表示されるようになったら、

    define('WP_DEBUG', true);
    

    をfalseに戻し、wp-content/debug.logを削除する。

<?phpの前にスペースが入ることがあるというのは、検索してすぐわかったが、ログイン画面が真っ白でもなにかしらのソースが書かれて途中で止まると思い込んでいたので、最初はリダイレクト関連かと思ってしまった。本件で最も参考になった先達サイトは「スタック・オーバーフロー」

  1. [その他]⇒[動作環境]⇒[ウィンドウ]⇒左下の「上級者向け設定」をチェック⇒[高度なウィンドウ]⇒「エンコードの種類」を「常に表示+改行コード+BOMの有無」 []