PHPでプログラムを書いているとき、画面が真っ白になったり、「Notice」や「Warning」が一切表示されなかったりすると「PHP エラー表示 されない」という問題に直面します。原因は設定ファイル、サーバー環境、コードの構造など多岐にわたります。この記事では、PHPのエラー表示が出ない理由を洗い出し、設定を修正してエラーメッセージを画面に出す方法を専門的に解説します。初心者から上級者まで、エラーの可視化で開発効率を高めたい方に有益な内容です。
目次
PHP エラー表示 されないケースが起きる主な原因
エラー表示がされない原因は多様ですが、主に設定ミス、環境による制限、コードの前処理段階での致命的エラーなどがあります。どの原因が該当するか切り分けることで、対応が迅速になります。
php.ini の設定で display_errors がオフになっている
PHPの主設定ファイルである php.ini 中で、display_errors が Off になっていると、画面にエラーメッセージは出ません。特に本番環境ではこの設定が Off になっていることが多いため、開発環境との設定差を確認することが重要です。display_errors を On に変更した後は、Webサーバーまたは PHP-FPM の再起動が必要です。
display_startup_errors がオフのままになっている
display_startup_errors は、PHPの起動時に発生するエラー(拡張モジュールがロードできない等)を表示する設定です。通常のコード実行部分のエラーとは別で、require や extension 設定など初期処理段階で起こる問題を対象とします。これが Off の状態だと、起動時エラーが隠されて「白画面」などの原因になります。
error_reporting のレベルが低く設定されている
PHPには様々なレベルのエラーがあり、Notice や Deprecated、Warning を抑制する設定も可能です。error_reporting が E_ALL & ~E_NOTICE のように一部のレベルを除外する設定になっていると、期待するエラーが表示されません。すべてのエラーを確認したい場合は error_reporting を E_ALL に設定しましょう。
.htaccess や .user.ini による設定の上書き
Apache モジュールまたは PHP-FPM を用いた環境で、ディレクトリ単位の設定ファイルによって display_errors や error_reporting の値が上書きされていることがあります。特定のディレクトリに置かれた .htaccess や .user.ini に display_errors = Off が書かれていると、php.ini の設定を無視して Off にされることがあります。
ini_set() 関数やフレームワークの設定で表示が制御されている
コード中で ini_set(‘display_errors’, ‘0’) が記述されていたり、フレームワークによりデフォルトでエラー表示が抑制されていたりすることがあります。特に bootstrap や共通読み込みファイルなど、アプリケーションの初期化処理の段階でこのような設定がされていると、個別スクリプトで display_errors を On にしても反映しないことがあります。
「PHP エラー表示 されない」を解消する設定と実践的な対処法
エラー表示がされない場合、どの設定を見直しどのように修正すればよいかを手順を追って解説します。環境タイプ(ローカル/サーバー)、PHPの実行方式(Apache mod_php/PHP-FPM/CGIなど)に応じて対応します。
php.ini の正しいファイルを特定して編集する
まず phpinfo() 関数を使って「Loaded Configuration File」を確認し、実際に読み込まれている php.ini を把握します。複数の php.ini が存在する環境や CLI 用と Web サーバー用で異なる設定が使われているケースもあります。認識したファイルを編集し、display_errors と display_startup_errors を On、error_reporting を E_ALL に変更したうえでサーバーを再起動してください。
.htaccess または .user.ini によるディレクトリ単位設定を確認する
Apache モジュールで動いているなら .htaccess に php_flag display_errors On を書く方法があります。PHP-FPM や FastCGI モードなら .user.ini を使って同じような内容を書けます。ただし設定可能なディレクティブには制限があり、php.ini で定義したモードによっては .htaccess/.user.ini で無視されることがあります。
コードで ini_set と error_reporting を使って一時的に表示させる
特定のファイルやテスト時に限定してエラーを可視化したいなら、スクリプトの先頭に次のような設定を追加します。
ini_set(‘display_errors’,’1′);
ini_set(‘display_startup_errors’,’1′);
error_reporting(E_ALL);
これで多くのエラーが画面に表示されます。ただし構文エラー(Parse Error)はファイル読み込み前に起こるため、この方法では捕捉できないことがあります。
サーバー/PHP-FPMの再起動を必ず行う
php.ini を修正しても、Web サーバーまたは PHP-FPM を再起動しないと設定変更が反映されません。Apache、Nginx + PHP-FPM など環境によりますが、それぞれサービスの再起動あるいはプロセスのリロードが必要です。これを怠ると、phpinfo() の表示に古い設定のままになってしまって分かりにくくなります。
環境別の注意点とケーススタディ
実際の環境により「PHP エラー表示 されない」問題の原因が異なるため、共通する注意点をまとめ、代表的なケースを紹介します。
本番環境では表示をオフにし、ログ記録をオンにする
セキュリティ上の理由から、本番環境でエラー表示を有効にするとサーバーのファイルパス、SQLクエリ、変数名などの内部情報が漏洩する可能性があります。そのため、本番環境では display_errors = Off、log_errors = On にして、エラーはログファイルに記録する設定が推奨されます。
PHP 8.0 以降の display_startup_errors のデフォルトが変化
PHP 8.0 以降では、display_startup_errors のデフォルト値が On に変更されており、起動時エラーが表示される設定が含まれるようになりました。しかしこの設定は開発時以外には Off にすることが望ましいです。起動時エラーの表示はサーバー構成情報を漏えいするリスクがあります。
Apache モジュール vs PHP-FPM での設定の違い
Apache の mod_php モードでは .htaccess 内の php_flag や php_value が効きますが、PHP-FPM モードでは .htaccess のこれらのディレクティブは無効になる場合があります。その場合は .user.ini や PHP-FPM プール設定ファイルを使って設定する必要があります。
構文エラーや致命的エラーが先に発生している場合の対応
ファイル内で構文ミス(セミコロン忘れ、中括弧の閉じ忘れなど)があると PHP パーサーがファイルを読み込む前に処理を停止し、ini_set や error_reporting の設定に到達する前に致命的エラーとして扱われることがあります。このような場合は構文チェックツールや IDE の機能でチェックを行うか、php -l コマンド等で検証することが有効です。
実際に PHP エラーを表示させる具体例と比較表
以下は、開発環境と本番環境での典型的な比較例です。どこをどう設定すればよいかをひと目で把握できます。
| 環境 | display_errors | display_startup_errors | error_reporting | log_errors |
|---|---|---|---|---|
| 開発環境 | On | On | E_ALL | On |
| 本番環境 | Off | Off | E_ALL & ~E_DEPRECATED & ~E_NOTICE | On |
この比較表を参考に、自分の環境が開発寄りか、本番寄りかを判断し、適切な設定に切り替えてください。
トラブルシューティングのチェックリスト
いくつか「PHP エラー表示 されない」問題を解消するための具体的なチェックポイントを箇条書きでまとめます。順に確認すると原因が見つかるはずです。
- phpinfo() を使って Loaded Configuration File と local value / master value を確認する
- php.ini の display_errors, display_startup_errors の設定が On になっているか確認する
- error_reporting の値が希望するエラーを含むレベルになっているか確認する
- .htaccess や .user.ini の設定で上書きされていないかチェックする
- コード内で ini_set や error_reporting を使っている部分がないか調べる
- 構文エラーが含まれていないか、ファイルを先に読み込む前のエラーがないか確認する
- サーバーまたは PHP-FPM を再起動して設定を反映させる
- ログファイルのパーミッションや error_log の設定が正しいか確認する
まとめ
PHPでエラー表示が出ない状態は、多くの場合、設定ファイルや環境、コードの初期処理などに起因します。display_errors や display_startup_errors、error_reporting の値を見直し、php.ini や .htaccess・.user.ini で適切に設定して、サーバーを再起動することが基本的な解決策です。
開発中は最大限のエラーを可視化し、本番環境では表示を抑えてログ記録に切り替える運用が望まれます。こうすることでコードの品質を保ちつつ、予期せぬ問題の発生時にも迅速に原因を追える体制が整います。
コメント