PHPで開発しているとき、予期せぬエラーが発生しているのに画面に何も表示されず真っ白、あるいは予想とは異なる挙動をすることがあります。これらの状態はエラー表示が抑制されているからかもしれません。見えないエラーはバグ修正を難しくし、原因不明のトラブルにつながります。この記事では「PHP エラー表示 されない」という問題に対して、原因の特定から設定の見直し、WordPress環境でのデバッグ方法まで、理解を深めて問題を解決するための最新かつ実践的なガイドを紹介します。
目次
PHP エラー表示 されない原因とは何か
PHPでエラーが画面に表示されない状態は、様々な原因が絡み合って起こります。まずは原因を整理することが解決への第一歩になります。
一般的には、php.iniの設定、サーバー設定、スクリプト上での制御、WordPressのデバッグ設定などが関係します。これらを順に確認することで、なぜ「PHP エラー表示 されない」のかが明らかになります。
php.iniのdisplay_errors設定が無効になっている
エラーをブラウザ上に表示するには、php.iniファイルの中で display_errors を On にする必要があります。Off のままだと、どんなエラーも画面に現れず、開発中であっても見えない状態になります。display_errors のほかに、display_startup_errors も関係します。PHPが起動中に発生するエラーは display_startup_errors を true にしないと表示されません。ini ファイルのロード先を phpinfo() で確認し、正しいファイルを編集しているかどうかを必ず確認してください。最新の PHP マニュアルにも display_errors と error_reporting の関係が詳述されています。
error_reporting のレベルが低く設定されている
php.ini で error_reporting が E_ALL 以外になっていたり、Notice や Warning を除外する設定になっていると、小さなエラーが通知されないことがあります。中には E_STRICT や E_DEPRECATED を扱わない設定もあり、古いコードが含まれていると見逃される可能性があります。なお、スクリプト内で error_reporting() 関数を使って局所的にレベルを上げているかどうかも確認が必要です。
.htaccess やスクリプトでの上書き、ホスティング環境の制約
.htaccess ファイルに php_flag display_errors on のような指定が使える環境もありますが、PHP がモジュールとして動いていなかったり、CGI/FastCGI/PHP-FPM の環境ではこの指定が効かない場合があります。また、ホスティング会社で display_errors の変更が禁止されていたり、.user.ini ファイルによってローカルの設定が上書きされているケースもあります。加えて、ini_set() を使ったスクリプト内での制御が、Master Value によって無視されることもあります。
WordPress環境で PHP エラー表示 されない時の対策
WordPress を使ってウェブサイトを構築している場合、テーマやプラグイン、コア部分での設定によってエラー表示が抑制されていることがあります。WordPress 特有のデバッグモードや設定ファイルの編集を通じて、「PHP エラー表示 されない」の原因をつぶしていきましょう。
wp-config.php でデバッグモードを有効にする
WordPress のルートディレクトリにある wp-config.php ファイルで、次の定数を設定することでデバッグモードを有効化できます。
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_LOG’, true);
define(‘WP_DEBUG_DISPLAY’, true);
さらに ini_set(‘display_errors’, 1); や error_reporting(E_ALL); を併用すると、ブラウザ表示とログ出力の両方でエラーを確認できます。これらの設定は開発環境でのみ使い、本番環境では必ず無効化することが安全です。
ログファイル(debug.log)の確認
WP_DEBUG_LOG を true に設定すると、wp-content フォルダ内に debug.log ファイルが生成され、そこに PHP のエラーや警告が記録されます。画面にエラー表示されなくても、このログを読めば問題の発生箇所や内容がわかります。ログファイルの読み取りにはファイルパーミッションや所有者の設定が正しいか注意が必要です。
テーマ・プラグインによる設定の干渉
テーマやプラグインが内部で ini_set や error_reporting を使って display_errors を Off にしていたり、デバッグ設定を上書きしていることがあります。不具合を発見するためには、一度全てのプラグインを無効化し、標準テーマで試すなどの絞り込みを行うと効果的です。また、関数ファイルの読み込みタイミングによってはエラー表示設定より前にエラーが発生し、表示されないケースがあります。
サーバー・PHP設定を確認して正しく反映させる方法
設定ファイルを書き換えても動作が変わらないなら、サーバー側の設定が原因である可能性が高いです。正しい php.ini が読み込まれているか、環境とキャッシュなどの影響を吟味しましょう。それにより、「PHP エラー表示 されない」という現象を根本的に解消できます。
phpinfo()で現在の設定を確認する
PHP のスクリプト内で phpinfo() を実行することで、Loaded Configuration File(読み込まれている設定ファイル)や display_errors、error_reporting、log_errors の現在の値を確認できます。変更した設定が「Local Value」「Master Value」としてどのように反映されているかがわかります。これで誤った php.ini を編集しているなどのミスを回避できます。
サーバーの再起動と OPcache のクリア
php.ini を編集した後、Apache や Nginx、PHP-FPM などのプロセスを再起動しなければ設定が反映されないことがあります。さらに、OPcache が有効になっているならキャッシュをクリアまたは無効化する必要があります。これをしないと古いキャッシュが残り、変更内容が見えないままになるケースがあります。
ファイルとディレクトリのパーミッションを確認する
ログファイルを生成するディレクトリやファイルの書き込み権限が不適切だと、ログが作成されなかったりエラーが記録されない事態が起こります。特に WordPress の wp-content フォルダ内の permissions や所有者が正しく設定されているかを確認し、サーバー側ユーザーに書き込み権限があるかどうかを確かめてください。
PHPコードで直接エラー表示させる具体的な設定方法
php.ini やサーバー設定が変更できない環境では、PHP スクリプト内で直接エラー表示を制御する方法が役立ちます。コードによる制御は調査用に限定し、安全に実装することがポイントです。
ini_set と error_reporting を使う
PHP のコード冒頭に次の設定を入れると、そのスクリプト内ではエラーがすべて表示されるようになります。
ini_set(‘display_errors’, ‘1’);
ini_set(‘display_startup_errors’, ‘1’);
error_reporting(E_ALL);
これにより Notice、Warning、Parse Error、Fatal Error などすべての種類が対象となります。解析エラー(parse errors)はスクリプト読み込み前に起きるため、php.ini で display_errors を On にしていないと表示されないケースがあります。
try / catch でエラー処理する
致命的なエラー以外の例外を捕捉したい場合には、例外処理構文 try と catch を使い、例外が発生したときに独自にログを吐いたり画面に情報を表示するように制御できます。ただし、PHP の構文エラー(parse error)は例外で捕捉できないため、事前の構文チェックが重要です。また、オートローダーやコントローラーの読み込み順にも注意が必要です。
簡単なテストスクリプトで確認する
問題がどこにあるか切り分けるために、エラー表示だけを行う最小限の PHP ファイルを作成してテストします。内容は次のようなものが有効です:
<?php ini_set(‘display_errors’, ‘1’); error_reporting(E_ALL); undefined_function_call(); ?>
このようにすれば、関数が存在しなければエラーが表示されるため、設定が画面表示を許しているかどうかが一目瞭然になります。
安全性を保ちつつ表示されない状態を活用する場合のベストプラクティス
開発中とは異なり、本番環境ではエラーを画面に表示することはセキュリティリスクになります。情報漏洩につながるため、表示を抑えてログに記録する構成が望ましいです。表示されない状態を保ちつつ、問題を追えるような体制を作ることがベストプラクティスです。
本番環境では display_errors を Off にする
本番環境で display_errors を On にしたままにすると、内部のファイルパスやコード構造、データベース情報などがユーザーに見えてしまう危険性があります。したがって、本番では php.ini や wp-config.php、あるいはサーバー制御パネルで display_errors を Off に設定しておくことが基本です。
log_errors を利用してエラーをログに保存する
エラーを表示させずに、発生した内容をサーバーのエラーログや WordPress の debug.log に記録することで問題把握が可能です。php.ini で log_errors を On、error_log のパスを設定し、書き込める状態にしておきます。WordPressなら WP_DEBUG_LOG を使って同様にログへ出力できます。
環境ごとに設定を切り替える仕組みを導入する
開発環境/ステージング環境/本番環境で設定を使い分けることが非常に重要です。環境変数やサーバーごとの設定ファイルを分離することで、デバッグ表示を誤って本番で有効にしてしまうミスを防げます。自動デプロイ時の設定反映も見直すと安心です。
まとめ
「PHP エラー表示 されない」という問題は、表示設定、報告レベル、WordPressのデバッグ、サーバー設定、コードでの上書きなど多くの要因が絡みます。原因がひとつとは限らないため、順を追って切り分けていくことが必要です。
まずは php.ini や wp-config.php で display_errors・error_reporting を確認し、phpinfo() で実際に読み込まれている設定を把握しましょう。次にサーバー再起動やキャッシュのクリア、ログの書き込み権限などをチェックします。最後に、開発環境と本番環境で設定を切り替える仕組みを導入することで誤設定や情報漏洩を防げます。
これらを確実に実行すれば、目に見えないエラーの原因をあぶり出し、安定した開発と安全な本番運用が可能になります。
コメント