Webサイトを運用していて、画面に何も表示されず真っ白、エラーが出ているはずなのに何も見えない――そんな経験はありませんか。PHPのエラーが表示されないときは、環境設定やWordPressの設定、サーバーの挙動、致命的なエラーなど原因が複数考えられます。本記事では「PHP エラー表示 されない」という事象の原因を整理し、ステップごとに最新情報を含めた具体的な対処法を紹介します。設定ファイル、WordPress、サーバーログ、PHPのバージョンなど多面的に見直して、原因を特定し解決につなげましょう。
目次
PHP エラー表示 されない 原因と基本的なチェックポイント
PHPでエラー表示されない状況が起こる基本的な原因と、まずは確認すべき設定を整理します。ここをきちんと押さえておくと、その後の調査がスムーズになります。
php.ini の display_errors 設定がオフになっている
PHPの設定ファイルである php.ini の中にある display_errors が Off に設定されていると、どんな警告やエラーもブラウザに表示されなくなります。致命的なパースエラーも含めて、画面が真っ白になる一因です。同様に、display_startup_errors がオフの場合、起動時のエラーが隠されます。これらは cli、apache モジュール、php-fpm など処理形態によって影響を受けるので、適切な php.ini を編集することが重要です。最新の PHP バージョンでは、display_startup_errors のデフォルト値や動作が変更されているため、その点も確認が必要です。
error_reporting のレベルが低いため見えるはずのエラーが抑制されている
error_reporting の設定が、致命的エラーのみ、あるいは warning や notice を含まないレベルになっていると、通常のコードミスや非推奨の関数呼び出しなどのエラーが表示されません。E_ALL を指定するか、bitmask で包括的にエラーをキャッチできる設定を行う必要があります。最新の PHP では非推奨機能 (deprecated) の扱いも厳しくなってきており、それらが notice や warning として報告されるようになっているためです。
サーバーや PHP-FPM、モジュールによる上書き/制限
PHP がどの環境で動いているかによって、php.ini の設定が反映されないことがあります。たとえば、PHP-FPM を使っていたり、共有レンタルサーバーで .user.ini や .htaccess で設定が上書きされていたり。さらに、ホスティング側で不正なエラー表示を防ぐために display_errors を強制的に無効化していることもあります。サーバー設定が原因の可能性があるため、phpinfo() で読み込まれている設定ファイルや local/master 値を確認することが肝要です。
WordPress で PHP エラーが表示されない時の設定方法
WordPress を使っている場合には、WordPress 固有のデバッグ設定が影響して PHP のエラーが表示されない原因になることがあります。ここでは WordPress 上で確認すべき設定と、その変更方法を詳しく説明します。
WP_DEBUG を有効化する
WordPress の root ディレクトリにある wp-config.php にて define( ‘WP_DEBUG’, true ) を指定することで、WordPress の内部で発生している PHP の警告・エラー・非推奨機能の通知が有効になります。デフォルトでは false になっており、有効にすることでより広い範囲の問題を検知できるようになります。開発環境では必ず有効にしてチェックすることが望ましいです。
WP_DEBUG_DISPLAY と WP_DEBUG_LOG の使い分け
WP_DEBUG が true の場合には、更に二つの定数で出力先を制御できます。
WP_DEBUG_DISPLAY は画面上にエラーを表示するかどうかを決めます。
WP_DEBUG_LOG は errors, warnings, notices 等をファイルに記録するかどうかを制御します。
生産サイトでは WP_DEBUG_DISPLAY を false にして画面表示を抑え、ログを記録させて問題を追跡するのが安全な運用です。これらの設定は wp-config.php の適切な位置(「/* これより下は編集しないでください */」の直前など)に記述することがポイントです。
致命的エラーやパースエラーの表示対策
構文エラー(未閉じのクォートやセミコロン忘れなど)は、PHP がスクリプトを読み込む段階で発生するため、ini_set や display_errors の設定がスクリプトの中であっても反映されないことがあります。こうした場合は php.ini を直接変更するか、サーバー側で制御できる場合は php-fpm.conf や .htaccess に display_errors = On を設定する必要があります。さらに register_shutdown_function や error_get_last を使ってシャットダウン時のエラーをキャッチすることも有効です。
サーバー・環境別の特殊な原因と対処策
PHP が動作している環境(共有サーバー、VPS、ローカル環境など)によって、エラー表示されない原因に特殊性があります。ここではそれぞれの環境でチェックすべきポイントを整理します。
共有ホスティングでの制限
共有サーバーでは、ホスティング会社がセキュリティやパフォーマンスの観点から display_errors を無効にしていたり、PHP 設定の変更を許可していないことがあります。また .htaccess や .user.ini を使って設定を上書きできない制限がある場合もあります。そのような場合はホスティングのサポートに問い合わせて、開発用に一時的に設定を変更してもらえるか確認することが大切です。
PHP-FPM や FastCGI モードでの上書き問題
PHP-FPM や FastCGI 環境では、php.ini の設定とは別にプール設定やプロセス単位のユーザー設定で display_errors がオフにされていることがあります。pool 設定ファイルやプロセスユーザー毎の local php.ini(.user.ini)を確認する必要があります。場合によっては ini_set や .htaccess の記述が無視されるモードになっているので、上位設定の確認が不可欠です。
ローカル開発環境やツールの影響
ローカル環境(XAMPP、MAMP、Docker 等)では設定ファイルの場所を誤っていたり、複数の PHP バージョンがインストールされていて想定外のバージョンが使われていることがあります。また、デバッグツール拡張である Xdebug を使っている場合、エラー出力に関して追加の強制設定やフィルタが存在するためそれらの設定も確認が必要です。
実際に画面にエラーを表示させる手順
ここまでの知見を踏まえて、実際に画面にエラーを表示させるための具体的な手順をまとめます。順番に実行して、どこで効果があるか確認していきましょう。
phpinfo() で設定されている php.ini の場所と現在値を確認
まず、当該サイトで動いている PHP の設定を確認するために、phpinfo() を実行してください。そこから読み込まれている php.ini のパス、local と master の値(display_errors, error_reporting 等)の現在の設定内容をチェックします。これにより、想定していないファイルを編集している可能性や、設定が反映されていない原因を把握できます。
php.ini の編集と再起動
phpinfo で判明した php.ini を見つけたら、display_errors と display_startup_errors を On に、error_reporting を E_ALL(またはより包括的なレベル)に設定します。設定を変更したら Apache や PHP-FPM のサービスを再起動してください。これで致命的エラーも含めて表示されるようになることが多いです。
WordPress の wp-config.php にデバッグ定数を追加/変更
Production 環境と Development 環境で異なる設定をするため、wp-config.php に以下のようなコードを追加します。
<?php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors', 1 );
@ini_set( 'display_startup_errors', 1 );
error_reporting( E_ALL );
開発中は display を true にして画面出力を確認し、生産環境では display を false にして表示を隠し、ログだけを取る方法で安全な運用が可能です。
致命的エラーをキャッチするためのシャットダウン関数利用
パースエラーや致命的エラーは、通常のエラーハンドラーではキャッチできないことがあります。この場合には register_shutdown_function を使って最後に error_get_last を見て、もしエラーがあれば出力するようなコードを wp-config.php の末尾などに一時的に挿入することで、画面真っ白の原因を特定できます。ただしセキュリティ上、デバッグ終了後はこのコードを削除するかコメントアウトすることを忘れないでください。
エラーが依然表示されない場合に試す追加の対策
上記の方法をすべて試してもなおエラー表示されないケースがあります。その場合に確認をおすすめする追加のポイントを紹介します。
ファイルのパーミッションと所有者の確認
ログを記録する debug.log ファイルやそのディレクトリ(例:wp-content)が PHP プロセスのユーザーから書き込み可能であることを確認してください。権限が不適切だとログファイルが作成できず、表示も記録もされません。一般にディレクトリに 755、ファイルに 644 の権限が標準ですが、環境に応じて調整が必要です。
キャッシュや OPcache の影響
PHP の OPcache やサーバーキャッシュ機能が有効になっていると、編集した php.ini の設定が反映されない、スクリプトの変更が反映されないといった現象が起こり得ます。OPcache のクリアやキャッシュ無効化を行い、確認を行ってみてください。また、ブラウザキャッシュだけでなくサーバーや CDN のキャッシュの可能性も考慮します。
ホスティング会社や環境のログを確認する
WordPress の debug.log に何も出ないけれど画面は真っ白というケースでは、サーバーのエラーログ(Apache や Nginx、PHP-FPM のログファイル)に原因が記録されていることがあります。ホスティングパネルや SSH、FTP でアクセス可能な場合はそれらのログを調べて、致命的エラーやモジュールレベルのエラーを探してください。
プラグインやテーマの競合チェック
テーマやプラグインが WP_DEBUG や display_errors 設定を意図的にオーバーライドしている可能性があります。最近変更を加えたプラグインやテーマを停止してみる、またはデフォルトテーマに切り替えて問題が消えるか確認することが有効です。競合を特定できれば、その部分のコードを修正することでエラー表示を復活させられます。
比較表:一般環境 vs WordPress 環境でのエラー表示設定
| 項目 | 一般的な PHP 環境 | WordPress 環境 |
|---|---|---|
| 画面にエラーを表示 | php.ini や .htaccess や ini_set で display_errors = On | WP_DEBUG = true & WP_DEBUG_DISPLAY = true |
| ログファイルへの記録 | log_errors = On + error_log パス確認 | WP_DEBUG_LOG = true → wp-content/debug.log等 |
| 致命的エラー・パースエラーへの対応 | php.ini 直接変更/サーバー再起動/register_shutdown_function | functions.php やプラグインなしでテスト/テーマ変更で確認 |
まとめ
「PHP エラー表示 されない」という現象は一つの原因ではなく、設定ファイル、環境、WordPress のデバッグ設定、サーバーの制限など複合的な要因によって起こります。まず phpinfo() で設定ファイルがどこを読み込んでいるか、display_errors や error_reporting の値を確認し、php.ini の編集と再起動を行うことが基本です。
次に WordPress を使用しているなら WP_DEBUG、WP_DEBUG_DISPLAY、WP_DEBUG_LOG 等の定数を適切に設定し、画面上・ログでエラーを得られるようにします。致命的な構文エラーに対してはシャットダウン関数で最後のエラーを取得する方法もあります。
さらに、ファイル権限、OPcache やキャッシュ、テーマやプラグインの競合、サーバーログの確認などを行うことで、原因が隠れていることが少なくありません。安全かつ効率良くエラー表示を復活し、問題箇所を特定して修正することで、サイトの安定運用が確実になります。
コメント