開発環境・コマンドライン

PHPでエラー出力をテストする方法を解説

PHPではエラー出力を適切に設定することで、発生した問題を素早く特定できるため、開発において重要なポイントとなります。

本記事では、PHP環境でエラー出力を有効にする方法や、実際にエラーをテストする手順を分かりやすく解説します。

初めてPHPに触れる方でも実践しやすい内容です。

PHPエラー出力設定

PHPでエラー出力を管理するためには、主に「php.ini」の設定変更と「ini_set」を使った実行時の変更方法があります。

以下ではそれぞれの方法に沿って設定内容や実装方法について詳しく説明します。

php.iniでの設定

php.iniはPHPの基本設定ファイルです。

サーバー全体や特定の環境で一括して設定が反映されるため、開発環境でのエラー出力の確認に適しています。

display_errorsの有効化

エラーを画面に表示するためには、display_errorsの設定を「On」に変更します。

php.iniファイル内で以下のような記述に変更してください。

; php.ini内の設定例
display_errors = On    // エラーを画面に出力するための設定

上記の設定により、PHP実行時にエラーが発生した場合、画面上にエラーメッセージが出力されるようになります。

Warning: Division by zero in /var/www/html/sample.php on line 10
Notice: Undefined variable: sample in /var/www/html/sample.php on line 12

error_reportingの数値設定

error_reportingはどの種類のエラーを出力するかを数値または定数で設定できます。

例えば、全てのエラーを表示する場合は以下のように設定します。

; php.ini内の設定例
error_reporting = E_ALL    // すべてのエラーと警告を出力するための設定

設定数値については、PHPのエラーレベルに対応したビット演算の組み合わせとなります。

EALL=32767のように内部表現されるため、個々の環境に合わせて適宜変更してください。

ini_setを使った実行時設定

スクリプト実行中に動的に設定を変更する場合は、ini_setを利用することで手軽にエラー出力設定を変更することができます。

これにより、特定のスクリプトだけでエラーの表示方法を変更できるため、デバッグ時に便利です。

スクリプト内でのエラー出力の変更

以下は、実行時に「ini_set」でエラー出力の設定を変更するサンプルコードです。

コード内のコメントに日本語の説明を記載しています。

<?php
// エラーを画面に出力するためにdisplay_errorsをOnに設定
ini_set('display_errors', '1');
// 全てのエラーを出力するためにerror_reportingをE_ALLに設定
ini_set('error_reporting', E_ALL);
// 以下、サンプルコードとして未定義の変数を使用
echo $nonExistentVariable;  // Noticeレベルのエラーが発生します
Notice: Undefined variable: nonExistentVariable in /path/to/sample.php on line 9

一時的な設定変更時の注意点

ini_setによる設定変更は、そのスクリプトの実行期間中のみ有効です。

複数のスクリプトで一括して設定を変更したい場合は、php.iniを編集するほうが望ましいです。

また、設定変更が反映されない場合は、サーバーやPHPのキャッシュの影響があるため、キャッシュクリアやWebサーバーの再起動が必要になる場合があります。

エラーテスト実行方法

エラーテストを実施することで、実際にコード上でどのエラーが発生するかを把握できます。

以下にテスト用コードの作成方法とエラー出力の確認手順を説明します。

テスト用コードの作成

PHPのエラー出力を確かめるためには、意図的にエラーを発生させるサンプルコードを作成するのが一般的です。

すぐにエラーの種類ごとに出力を確認できるようにします。

強制エラー生成のサンプル作成

強制的にエラーを発生させるため、例えば未定義変数や存在しないファイルをインクルードする方法があります。

以下のサンプルコードでは、未定義変数を使用し、Noticeレベルのエラーを発生させています。

<?php
// 強制的にエラーを発生させるサンプルコード
// 未定義変数の使用でNoticeエラーが発生
echo $undefinedVariable;
// 存在しないファイルをincludeしてWarningエラーを発生させる
include 'nonexistent.php';
Notice: Undefined variable: undefinedVariable in /path/to/sample.php on line 5
Warning: include(nonexistent.php): failed to open stream: No such file or directory in /path/to/sample.php on line 8
Warning: include(): Failed opening 'nonexistent.php' for inclusion in /path/to/sample.php on line 8

Warning、Notice、Exceptionの発生確認

各エラーレベルを意図的に発生させるためのサンプルコードも作成できます。

例えば、以下のコードはExceptionを発生させる例です。

<?php
// Exceptionを発生させるサンプルコード
try {
    // throwを使用して例外を明示的に発生
    throw new Exception('サンプル例外発生');
} catch (Exception $e) {
    // 例外内容を表示
    echo '例外メッセージ: ' . $e->getMessage();
}
例外メッセージ: サンプル例外発生

エラー出力の確認手順

作成したサンプルコードによって実際にどのようなエラーが出力されるかを確認します。

ここでは、ブラウザ上での動作とログファイルへの出力をチェックする手順を説明します。

ブラウザでの表示確認

ブラウザで対象のPHPスクリプトを実行し、出力されるエラーメッセージを確認します。

設定によりエラーメッセージが画面上に表示されるため、発生したエラーの種類や位置が一目でわかります。

さらに、インラインコード例で使用しているechoによる出力も確認できます。

ログファイルへの出力チェック

PHPのエラー出力先をログファイルに設定している場合、設定したログファイルにエラーが正しく記録されるか確認します。

php.iniの設定でerror_logパラメータを確認するか、動的にini_setで指定したログファイルパスにエラー情報が出力されるかをチェックしてください。

<?php
// ログファイルにエラーを出力させる例
// 指定したファイルにエラー情報をログ出力
ini_set('error_log', '/var/www/html/php_error.log');
ini_set('display_errors', '0');  // ブラウザへのエラー出力をオフに設定
// 存在しない関数を呼び出してFatalエラーを発生
nonexistentFunction();
[Date Time] PHP Fatal error:  Uncaught Error: Call to undefined function nonexistentFunction() in /path/to/sample.php:7
Stack trace:
#0 {main}
  thrown in /path/to/sample.php on line 7

このコードを実行し、指定のログファイル/var/www/html/php_error.logにエラー情報が記録されているか実際のファイルを確認してください。

トラブルシューティング

エラー出力の設定が期待通りに動作しない場合、設定の反映や環境ごとの違いに注意する必要があります。

以下ではその点について詳しく説明します。

設定反映の確認

設定変更後、反映されていない場合の確認ポイントについて説明します。

php.ini再読み込みとキャッシュ確認

php.iniファイルを変更した際、Webサーバーの再起動が必要な場合があります。

また、PHPの設定キャッシュが影響することがあるため、変更を反映させるために以下の手順を実施してください。

  • Webサーバーの再起動やリロードを実行する
  • opcache等のPHPキャッシュ機構が有効な場合、キャッシュをクリアする

手動で設定の反映状況を確認するため、phpinfo()関数を利用すると現在適用されている設定が一覧で確認できます。

<?php
// 現在のPHP設定を出力
phpinfo();
...(phpinfo()により出力された設定一覧が表示)

環境依存設定のチェック

ローカル環境やサーバー環境によって、php.iniの場所や読み込みファイルが異なる場合があります。

環境に応じた設定ファイルを編集しているか、またはユーザーごとの設定(.user.iniなど)が上書きしていないか確認してください。

PHPバージョン差異への対応

PHPのバージョンが異なると、エラーレベルや設定値が変わることがあります。

そのため、各バージョンに応じた変更点を確認することが大切です。

バージョン固有のエラーレベル調整

PHPのバージョンごとに利用できるエラーレベルや通知のレベルが異なる場合があります。

特定のバージョンでのみ発生するエラーがある場合は、error_reportingの設定値をバージョンごとに調整してください。

たとえば、最新バージョンではE_DEPRECATEDが含まれることがあるため、以下のように設定することが考えられます。

<?php
// PHPバージョンに応じたエラーレベルの設定例
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
    error_reporting(E_ALL & ~E_DEPRECATED);
} else {
    error_reporting(E_ALL);
}
// バージョンによってエラー出力のレベルが変化します

開発環境での注意点

開発環境では、エラー表示をオンにする設定が望ましいですが、本番環境ではセキュリティ面やユーザー体験を考慮してエラー出力をオフにする必要があります。

エラー出力の設定が誤って本番環境に反映されると、重要な情報が漏洩する可能性があるため、環境ごとの設定管理に注意してください。

また、複数の開発環境で作業する場合、各環境の設定ファイルが混同しないよう、環境変数やホストごとのphp.iniファイル管理を行い、エラー出力の動作確認を徹底してください。

まとめ

この記事では、PHPのエラー出力設定方法とエラーテストの実施手順、トラブルシューティングのポイントについて解説しました。

各手法の特徴や設定変更の注意点を理解することで、開発環境におけるエラー検出と対策が容易になることを示しています。

ぜひ、実際に設定変更やサンプルコードの検証を行い、スムーズなデバッグ作業に活かしてください。

関連記事

Back to top button
目次へ