PHPで開発をしているとき、画面が真っ白になったり、エラー内容が全く表示されなかったりすると原因が分からず焦ることがあります。この記事では「PHP エラー表示 されない」という状態に陥る理由を多角的に見て、最新情報に基づいて原因の確認方法と実際の対処法を具体的に解説します。設定ミス・サーバー構成・PHPバージョンの違いなど、見落としやすいポイントをカバーしているので、問題解決につながるでしょう。
目次
PHP エラー表示 されない 主な原因とは
PHP エラー表示 されないという状況には、多くの原因が考えられます。ここではサーバー設定、PHP構成、コードレベルなど、さまざまな視点から原因を整理します。まずは、どの設定や環境が原因となってエラーメッセージが隠れているのかを把握することが問題解決への第一歩です。どの部分が該当するかを順に確認していきましょう。
display_errors が Off 設定になっている
PHPの設定ファイル(php.ini)でdisplay_errorsディレクティブがOffに設定されていると、実行時エラーがブラウザに表示されません。開発中の場合はこれをOnに変更することが必要です。設定を変更した場合、ウェブサーバーあるいはPHP-FPMを再起動することで反映されます。設定変更後も影響していない場合、読み込まれているphp.iniが思っているものと異なる可能性があります。
phpinfo関数を使って現在読み込まれているiniファイルの場所とdisplay_errorsの値を確認します。CLIとウェブサーバーでは別のphp.iniが存在することがあるので注意が必要です。設定が正しいにも拘わらず表示されない場合、別の設定箇所で上書きされている可能性があります。
error_reporting レベルが低く設定されている
error_reportingで表示するエラーの種類を指定しているため、Notice、Warning、Deprecatedなどが対象外の設定になっていると、それらのエラーは表示されません。E_ALLなどを指定することで可能な限り多くのエラーを表示させられます。特定の種類のエラーのみ表示したい場合も、error_reporting関数を使って柔軟に指定できます。
例えば、開発環境ではerror_reporting = E_ALLとして、すべての種類のエラーを表示するようにします。その一方で、本番環境では警告等はログに記録するのみとし、表示は抑える設定に切り替えるのが安全な運用です。
コード内で ini_set や error_reporting が無効化されている
php.iniで設定したdisplay_errorsやerror_reportingが、スクリプト内部でini_set関数やerror_reporting関数で上書きされていたり、無効化されていたりするケースがあります。特にframeworkやWordPressテーマ・プラグインなどが内部でこれらを操作している場合、意図せずエラー表示がオフになることがあります。
スクリプトの先頭部分でini_get関数を使って現在の設定値を取得してログに出力するなどして、意図しない上書きがないかを確認するとよいでしょう。Fatalな構文エラーの場合はそれ以前のコードが実行されないため、ini_setが機能しないこともあります。
サーバー構成や PHP SAPI による制約
ApacheのモジュールとしてPHPが動いている場合と、PHP-FPMやFastCGIで動いている場合では設定の場所・優先順位が異なります。Apacheモジュールでは.htaccessでphp_flagディレクティブを使うことが可能ですが、PHP-FPM環境ではphp.iniまたはプール設定(.user.iniなど)で設定する必要があります。
また、共有ホスティングなどではサーバー設定が強制的にエラー表示を抑制するようになっていることがあり、個別に設定を変更できない場合があります。このような場合はホスティング側のコントロールパネルで設定を確認するか、サポートに問い合わせる必要があります。
PHP エラー表示 されないときの確認手順
PHP エラー表示 されないと感じたら、原因を特定するために段階的に確認を進めることが重要です。以下の手順を順番に実行することで、多くのトラブルを素早く解決できます。設定場所やコードの干渉を一つ一つ潰していきましょう。
phpinfo() を使って現在の設定を確認
phpinfo関数を使うスクリプトを作成してブラウザで表示させ、「display_errors」「display_startup_errors」「error_reporting」「Loaded Configuration File」がどのようになっているかを確認します。ここで読み込まれている設定ファイルのパスが、編集しているphp.iniと一致しているかどうかを見ることが最初のポイントです。
もしphpinfoに表示される設定が編集内容と異なる場合、編集が反映されていないか、別のファイルが読み込まれていることになります。CLI版PHPとウェブサーバー版PHPで設定が異なることはよくあるため、それぞれ確認が必要です。
設定変更後のサーバー再起動の確認
php.iniを編集したり、新しい設定ファイルをアップロードしたりした場合、それが反映されるにはウェブサーバーまたはPHP-FPMの再起動が必要です。ApacheやNginx+PHP-FPMなど環境によってコマンドが異なるため、それぞれ適切な方法で再起動を行ってください。
再起動せずに設定を変えても、古い設定がキャッシュされて使われ続けることがあります。サーバーの再起動、PHP-FPMの再読み込み、あるいは必要に応じてプロセスマネージャーの再起動も含めて確認します。
スクリプト内での上書きや suppression 演算子の使用をチェック
スクリプト内で ini_set(‘display_errors’, 0) や error_reporting(…) のようなコードが入っていないか、またエラー抑制演算子(@)が使われていないかを探します。プラグイン・テーマ・ライブラリなどが意図せずこれらを変更していることがあります。
また、構文エラー(パースエラー)はスクリプトの解析時に発生するため、ini_setなどを使っても表示されないことがあります。構文エラーも含めて見たい場合は、php.iniやPHP-FPMプール設定で display_startup_errors を On にする必要があります。
ログへの書き込み設定とログファイルの確認
表示されないエラーがある場合でも、log_errors を On にして error_log にログ先を設定することで、エラー内容をファイルに記録させられます。ログファイルのパスが正しく設定され、権限が正しいかを確認することが必要です。
エラーログがどこに書き込まれるかは環境によって異なり、共有ホスティングではホスト指定のディレクトリ、専用環境では /var/log/php などが一般的です。ログが記録されていない場合、設定ファイルで error_log が指定されていないか、書き込み権限が不足していることが考えられます。
具体的な対処法:設定を正しく修正する方法
PHP エラー表示されない問題を解決するための具体的な対処法を紹介します。ここで紹介する方法は、さまざまな環境(共有ホスティング、独自サーバー、ローカル開発環境)に応じて調整が可能です。最新のPHPバージョンでも通用する安全で効果的な設定を案内します。
php.ini を編集して display_errors を On にする
まずは php.ini に移動し、以下のディレクティブを探して設定を変更します。
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = 任意の書込み可能なログファイルパス
変更後はウェブサーバーまたはPHP-FPMを再起動して設定を反映させます。本番環境からは、display_errors を Off にしつつ log_errors を On にすることでセキュリティを維持しながらエラーを把握できるようにします。
.htaccess または .user.ini を使って設定を上書く
共有ホスティングなどで php.ini にアクセスできない場合は .htaccess(ApacheモジュールとしてPHPが動作している場合)や .user.ini(PHP-FPM/CGI環境)に設定を記述して display_errors を制御できます。例えば、.htaccess で php_flag display_errors On と書くか、.user.ini に display_errors = 1 と記述します。
ただし .htaccess や .user.ini の優先順位はサーバーの設定に依存します。また、ファイルが反映されない場合はそのファイルが読み込まれているかどうかを phpinfo() で確認してください。
WordPress など CMS 環境での設定調整
WordPressでは WP_DEBUG、WP_DEBUG_DISPLAY などの定数がエラーメッセージ表示に影響します。wp-config.php にて define(‘WP_DEBUG’, true) および define(‘WP_DEBUG_DISPLAY’, true) を設定し、かつ ini_set で display_errors を On にすると開発中はエラーを確認しやすくなります。
ただし、プラグインやテーマによりこれらの定数が上書きされていることがあるので、カスタムコードを検索して WP_DEBUG や ini_set に関連する記述が不要に変更されていないか確認してください。
構文エラーや致命的エラーを表示させる設定を行う
構文エラーはスクリプトが解析される段階で発生するため、display_errors や error_reporting の設定だけでは表示できないことがあります。display_startup_errors を On にし、PHPの設定全体で起動時のエラーを表示するようにします。これによりモジュール読み込み失敗や初期化時の問題が把握できるようになります。
PHPのバージョンが影響することもあり、最新のPHPではデフォルトで display_startup_errors などの設定が抑制されている場合があります。開発環境で完全にエラーを可視化したい場合はこれらの設定を見直してください。
環境別の注意点と最新の情報
PHP エラー表示されない問題は環境によって異なる条件や制約があります。最新情報に基づいた注意点を環境ごとに整理し、思わぬ落とし穴を回避できるようにします。
ローカル開発環境での特徴
ローカル環境(MAMP・XAMPPなど)では php.ini を編集すれば設定が反映しやすいですが、PHP の CLI とウェブサーバーで異なる ini ファイルを使用していることがあります。phpinfo() による確認が必須です。
また、ローカルでは設定ファイルのキャッシュや OPCache の影響で古いキャッシュが残って表示されないことがあります。キャッシュクリアや PHP 再起動で対処可能です。
共有ホスティングやレンタルサーバーの制限
多くの共有ホスティングではセキュリティ目的で display_errors を抑制する設定が強制されていることがあります。この場合、php.ini を直接編集できないため、ホスティング管理画面や .htaccess/.user.ini を使う方法を試す必要があります。
もしそれでも表示されない場合、ホスティング会社に問い合わせて制限があるかどうか確認してください。プラグインやテーマも影響している可能性があるので、それらのコードを無効化するテストを行うことが有効です。
PHP のバージョンの違いによる挙動差異
PHP 7.x、8.x などバージョンが上がるにつれて、エラー処理や例外の扱いが改善され、parse エラーや致命的エラーの既定の挙動が厳格になっています。これにより、以前は表示されていたものが表示されないケースが増えることがあります。
たとえば、parse エラーはスクリプトのコンパイル前に発生するため、ini_set を記述しているファイルに構文エラーがあると display_errors や error_reporting の設定が実行される前に停止してしまいます。display_startup_errors やサーバー設定でこれらを表示するようにしておくことが重要です。
比較表:設定別の挙動
| 設定項目 | 表示される条件 | 表示されない/制限される条件 |
|---|---|---|
| display_errors = On | ブラウザにエラーが直接表示される 開発時のデバッグで役立つ |
php.iniが読み込まれていない サーバーで制限されている |
| error_reporting = E_ALL | すべての種類のエラーが報告対象になる | 特定のレベルのみ設定されていて通知・警告が除外されている |
| display_startup_errors = On | 起動時の構成エラーやモジュールロード失敗なども表示される | この設定が Off だと構文エラーなどが隠れることがある |
| log_errors = On | 表示されないエラーでもログに記録されるので後から解析可能 | ログ先が無効または権限がないと記録できない |
よくあるトラブルケースとその対処例
実際に開発や運用をしていて遭遇しやすいシーンと、それぞれの対処法をサンプル付きで示します。問題の切り分けが素早くできるようになります。
真っ白な画面(White Screen of Death)が出る
画面が真っ白で何も表示されない場合、多くは致命的なエラーや構文エラーが発生しており、スクリプトが途中で停止しているためです。display_errors が Off または構文エラーが起きるファイルで設定が反映されていないと、何も見えません。
この場合、まず php.ini の display_errors を On、display_startup_errors を On に設定し、error_reporting を最大(E_ALL)にします。次に phpinfo() で設定の確認、さらにログを確認してエラー内容を把握します。
WP_DEBUG 無効化してもあちこちにエラーが出る(WordPress)
WordPress環境では WP_DEBUG、WP_DEBUG_DISPLAY、WP_DEBUG_LOG の設定が影響します。これらを false にしていても、テーマ・プラグインによりこれらが上書きされていることがあります。さらに ini_set(‘display_errors’, …) を使っているコードがあるかを確認する必要があります。
テーマやプラグインを一時的に無効化してエラー表示が改善するかを試すことで、どの部分が原因かを特定できます。またホスティング側でエラー表示が制限されている場合もあり、その場合は管理画面で設定するかサポートに問い合わせが必要です。
構文エラーが表示されない
構文エラーは PHP の解析前に発生するため、スクリプト内で ini_set を使う設定では捕らえられないことがあります。display_startup_errors を On にしているか、php.ini の該当設定を見直すことが重要です。CLI 環境で構文チェック(php ‐l)で予め問題を検出するのも有効です。
また、誤って UTF-8 BOM が先頭にあったり、ファイルの文字エンコーディングが不適切であったりすると意図しない出力やエラー抑制につながる場合があります。エディタの設定も併せて確認します。
まとめ
PHP エラー表示されない問題は、display_errors や error_reporting の設定だけでなく、コード内部やサーバー構成、使用中の CMS やプラグインの干渉、PHP のバージョンごとの挙動など、多様な要因が関係します。問題解決のためには、phpinfo()で設定の現状を確認し、php.ini/.htaccess/.user.iniなどの設定ファイルを正しく編集し、ウェブサーバーや PHP-FPM を再起動することが重要です。
また、開発環境ではエラーを可視化する設定を十分に行い、本番環境ではエラー表示を抑制してログ記録に切り替えることが、安全性と利便性の両立につながります。これらのステップを順に実行することで、「PHP エラー表示 されない」という状態から脱して、エラーメッセージを確認しやすい環境を構築できるようになります。
コメント