PHPでサイトを構築していて、画面に何も表示されず、「PHP エラー表示 されない」と感じることは誰にでも起こりうる問題です。特にWordPressなどのCMSを使っていると、設定ファイルや環境によってエラーが非表示になっていたり、画面が真っ白になる「ホワイトスクリーン」の原因になることがあります。本記事では、PHPでエラー表示がされない理由を整理し、設定すべきポイントや最新の確認方法、WordPress特有のデバッグ設定まで、包括的に解説します。
目次
PHP エラー表示 されない 原因と検索意図の見出し群
検索意図
- PHPの設定ファイル(php.ini)でエラー表示を制御する方法を知りたい
- WordPressで画面にエラーが出ず白紙の画面になる原因を探したい
- PHPエラーがログには残るが表示に出てこない状況を解決したい
- Fatalエラーや構文エラーが画面に出ない理由と対応法を知りたい
- PHP-FPM、Apache、Nginxなど使用環境ごとの設定の違いを理解したい
「PHP エラー表示 されない」を解決する基本設定とは
PHPでエラーが画面に表示されない最も一般的な理由は、php.iniの設定でerror_reportingやdisplay_errorsが正しく設定されていないこと、また設定を反映するためのサーバーやPHPプロセスの再起動がされていないことです。あるいは、使用している環境がPHP-FPMなどで、各プールや設定ファイルでエラー表示設定が上書きされている可能性があります。最新環境ではdisplay_startup_errorsという設定も影響します。正しいiniファイルを編集して、それがロードされているか確認するのが第一歩です。
php.iniで見るべき設定項目
php.iniファイルには主に以下の設定が存在します:display_errors、display_startup_errors、error_reporting、log_errorsなど。display_errorsは実行時のエラーを画面に出すかどうか、display_startup_errorsはPHP起動時のエラーを表示するかどうかを制御します。error_reportingはどのレベルのエラーを含めるかをビットマスクで指定します。通常開発環境ではE_ALLにし、productionでは特定のレベルを除外するのが一般的です。
設定を反映させるための再起動と環境差異
php.iniを変更しただけでは反映されないことがあります。Apacheの場合はApacheを再起動、PHP-FPMを使っているならFPMプロセスを再起動する必要があります。また、CLI用、FPM用、モジュール版等で別々のphp.iniがあるため、編集対象が実際に使用されている設定ファイルであることをphpinfo()などで確認することが重要です。
Fatalや構文エラーはスクリプト内でキャッチできない場合もある
構文エラー(parse error)などが発生すると、スクリプトが読み込まれる前にPHPが停止してしまうため、ini_setなどの実行時設定が効かないことがあります。そういった場合はphp.iniやサーバー設定でdisplay_errorsが最初から有効になっている必要があります。Fatalエラーはscreen表示ではなくHTTP 500など一般的な応答となることがあります。
WordPressでPHP エラー表示 されない 特有の原因と解決方法
WordPressでは自身のデバッグモード設定がPHPの設定と連動しています。WP_DEBUG、WP_DEBUG_DISPLAY、WP_DEBUG_LOGなどの定数をwp-config.phpに設定することで、サイト上にエラーを表示させたり、ログに書き出したりすることができます。これらの設定がfalseになっていたり、無効化されていたりすると「PHP エラー表示 されない」という状況になります。
WP_DEBUGとその付随設定の理解
WP_DEBUGをtrueにすることで、WordPressはerror_reportingを全レベルにすると共に、プラグインやテーマの非推奨な関数使用なども通知対象にします。WP_DEBUG_DISPLAYは画面への表示を制御する定数であり、WP_DEBUG_LOGはエラーログへの出力先をwp-content/debug.logにするかを制御します。これらの設定を組み合わせることで、画面には見せずログで確認する構成にもできます。
Ajax/REST/XML-RPCリクエストとエラー非表示
WordPressではAjaxやREST API、XML-RPCリクエストに対して、デフォルトでWP_DEBUG_DISPLAYのtrue/falseに関わらずdisplay_errorsを無効にする処理が入っていることがあります。そのため、通常の画面ではエラーが出ても、バックグラウンドでのリクエストでは画面に表示されずログだけに出ることがあります。
ホワイトスクリーン(WSOD)の原因特定ステップ
WordPressでサイトが真っ白(White Screen)になり、「PHP エラー表示 されない」状況ではFatalエラーやメモリ枯渇、テーマ/プラグインの競合などが影響していることが多いです。まずはプラグインを一つずつ無効化し、テーマをデフォルトに切り替えてみることが有効です。その上でデバッグモードを有効にし、ログを確認することで原因を特定しやすくなります。
環境別:Apache・Nginx・PHP-FPMで「PHP エラー表示 されない」問題への対応
使用環境によって設定ファイルの場所や優先順位が異なります。Apacheモジュール版、PHP-FPM+Nginx、CLIなどそれぞれの環境でdisplay_errorsやmaster値、local値の差異があるため、どの環境下でエラーが表示されていないかを把握することが重要です。また、特定の設定ファイルやプール設定がerror表示をオーバーライドしているケースもあります。
設定ファイルの場所を特定する方法
phpinfo()関数を使って、Loaded Configuration File(読み込まれているphp.ini)やAdditional .ini Filesディレクトリを確認します。CLIで使うphp.iniはWebサーバー用のものとは異なる場合があります。PHP-FPMを使っていればプール設定(pool.dなど)もチェックが必要です。このようにして、どのファイルでdisplay_errorsが設定されているかを確実に把握できます。
Nginx + PHP-FPMでのオーバーライドに注意する設定箇所
PHP-FPMのプール設定ファイルでは、php_flagディレクティブでdisplay_errorsを明示的にOn/Offすることが可能です。php.iniでOnにしていても、FPMプール設定でOffになっていれば画面には出ません。Nginx+PHP-FPM構成で表示されない場合はFPMプール設定の内容を確認し、サーバーを再起動する必要があります。
Error表示の優先順位:master値とlocal値
phpinfo()ではdisplay_errorsのmaster値とlocal値が確認できます。master値はphp.iniやプール設定による値、local値はスクリプト内や.htaccessなどで上書きされたものです。master値がOffでlocal値がOnでも構文エラーなどはmaster値が関与するため表示されないことがあります。従って両方を確認し、必要ならlocalな上書きを行うか、master値を修正する必要があります。
構文エラー・致命的エラーが画面に出ない落とし穴と対策
構文エラー(parse error)や致命的エラー(fatal error)は、スクリプトが実行開始できない状態で発生するため、ini_setやPHPスクリプト中の設定が全く実行されません。その結果、画面が真っ白になるか、HTTP 500などの汎用エラーが返されます。こうしたエラーを画面で確認するにはサーバー側の設定(php.ini・サーバーエラーページの設定など)が最初から正しくされている必要があります。
構文エラーはini_setで表示できない理由
PHPスクリプトに構文ミスがあると、PHPコンパイラがそのファイルを読み込めず、実行自体が始まりません。ini_setによるdisplay_errorsやerror_reportingの設定はスクリプト実行中に働くものであり、構文エラーには間に合いません。そのため、構文エラーを表示するにはphp.iniまたは.htaccessなどでdisplay_errorsを有効にする必要があります。
致命的エラーで画面が白くなる主な原因
致命的エラーとは、未定義関数呼び出し、クラスのロード失敗、メモリ不足など、スクリプトが続行不能となるエラーです。その際にWordPressは内部でFatal Error Handlerを使い、画面表示を抑制することがあります。WP_DISABLE_FATAL_ERROR_HANDLERという定数でこの動作を制御できます。エラーを可視化したい場合にはこの設定を確認することも対策です。
最新のPHPバージョンでの設定に関する注意点
最新のPHPでは、PHP 8系以降でdisplay_startup_errorsのデフォルト値やerror_reportingのデフォルトが変わっていたり、廃止された設定があるため、古い情報に頼るのは危険です。また、default設定ではDeprecatedやStrictの通知が隠される場合もあります。最新のPHPマニュアルによれば、開発環境ではdisplay_errorsをOnにし、error_reportingをE_ALLにすることが推奨されており、log_errorsの設定や表示形式(html_errors等)についても留意すべき最新の仕様があります。
display_startup_errorsの既定値の変化
PHP 8.0以前ではdisplay_startup_errorsのデフォルト値はOffでしたが、それ以降のバージョンで既定値が変更されていることがあります。起動時のエラーを表示させたい場合、この設定を有効にすることが必要です。また、構成ファイルでこの設定が无効化されていると、PHP自体が初期化する過程でのエラーが画面に出ません。
Deprecated・Strict関連の通知とerror_reportingの指定
最新のPHPでは非推奨関数や厳格モード(Strict)の警告も通知レベルに含まれますが、既定ではこれらを表示しない設定になる場合があります。非表示にされる通知を含めて全部見たい場合はerror_reportingをE_ALLに設定し、通知レベルを明示的に含めるようにする必要があります。
トラブルシューティングチェックリスト
「PHP エラー表示 されない」という現象に遭遇したときに順番にチェックすべき項目をまとめます。これらを順に確認することで原因を特定しやすくなります。
- phpinfo()を使ってロードされているphp.iniやadditional iniファイルの場所とdisplay_errorsやerror_reportingの現在の値を確認する
- あなたが編集したphp.iniがWebサーバー用・FPM用等、正しい設定ファイルであることを確認する
- Apache、PHP-FPMなどWeb関連のサービスを再起動して設定を反映させる
- スクリプト内でini_setやerror_reportingを使って表示設定を追記してみる
- WordPressならwp-config.phpでWP_DEBUGやWP_DEBUG_DISPLAY、WP_DEBUG_LOGの設定を確認/調整する
- Fatalエラーや構文エラーのため画面が真っ白であるケースではサーバーログ(error_log)を探す
- PHP-FPMプール設定やNginx/Apacheの設定でdisplay_errorsやその他エラー表示を抑制するオーバーライド設定がないか確認する
- PHPバージョン固有の仕様変更(デフォルト値変更や設定項目の廃止など)を確認する
- Production環境ではエラーを表示させるよりログに残す運用を推奨する
まとめ
「PHP エラー表示 されない」という問題は、php.iniのdisplay_errorsやerror_reporting設定、サーバーやPHPプロセスの再起動、複数の設定ファイルによるオーバーライド、WordPressのデバッグ定数など、多くの要因が関係しています。Fatalや構文エラーはスクリプトが読み込まれない段階で発生するためini_setでは対応できないことがあり、production環境では画面表示を控えてログ出力を重視する運用が望ましいです。
リスクを避けつつエラーを確認したいなら、開発環境で全てError表示をOnにし、error_reportingをE_ALLに設定。WordPressならWP_DEBUGを有効化し、WP_DEBUG_LOGでログ出力、WP_DEBUG_DISPLAYで画面表示をコントロールする。環境別の設定ファイルとオーバーライドを丁寧に確認すれば、「PHP エラー表示 されない」問題はほぼ解決できます。
コメント