0Pricing
PHP Academy · レッスン

PHPのエラーの種類と報告

notice、warning、fatal errorと、error_reportingのレベルを理解します

「PHPのエラーの種類と報告」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

PHPのエラーの種類

PHP には、重大度の異なる複数のエラーがあります。

  • Notice — 軽微な問題。実行は継続する
  • Warning — 致命的ではない問題。実行は継続する
  • Fatal Error — 実行が直ちに停止する
  • Parse Error — 構文エラー。実行前に停止する
  • Deprecated — その機能は削除される予定である

error_reporting()

error_reporting() で、PHP が報告するエラーを制御します。

<?php
// Show all errors (development)
error_reporting(E_ALL);

// Hide notices and deprecated
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

// Production: no display, log to file
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

display_errors と log_errors

エラー処理に関する php.ini の主な設定:

  • display_errors = On — ブラウザーにエラーを表示します(開発時のみ)
  • display_errors = Off — ユーザーからエラーを隠します(本番環境)
  • log_errors = On — error_log ファイルに書き込みます
  • error_log = /path/to/file — ログの保存場所を指定します

本番環境では、ユーザーにエラーを表示しないでください。

trigger_error でエラーを発生させる

trigger_error() を使って独自の PHP エラーを生成します。

<?php
function divide(int $a, int $b): float {
    if ($b === 0) {
        trigger_error('Division by zero', E_USER_WARNING);
        return 0.0;
    }
    return $a / $b;
}

echo divide(10, 0);  // triggers E_USER_WARNING

カスタムエラーハンドラー

set_error_handler() を使って独自のエラーハンドラーを登録します。

<?php
set_error_handler(function(int $errno, string $errstr, string $file, int $line): bool {
    $message = "[$errno] $errstr in $file:$line";
    error_log($message);
    if ($errno === E_USER_ERROR) {
        http_response_code(500);
        die('Internal error — please try again later');
    }
    return true;  // don't execute PHP internal error handler
});

trigger_error('Custom error message', E_USER_ERROR);

よくあるエラーの原因

PHP エラーの典型的な原因:

  • 未定義の配列キーにアクセスする → Notice
  • false を返す関数を呼び出し、その結果を使用する → Warning
  • 未定義の関数を呼び出す → Fatal Error
  • セミコロンがない → Parse Error
  • ゼロで除算する → Warning(INF または NAN を返します)

エラー抑制演算子 @

@ 演算子は、1つの式から発生するエラーを抑制します。ただし、使用は避け、適切なエラー処理を行ってください。

<?php
// Bad: hides errors silently
$result = @file_get_contents('missing.txt');

// Good: check explicitly
$result = file_get_contents('missing.txt');
if ($result === false) {
    // handle the error
    echo 'File not found';
}

PHP 8 の JIT とエラーの変更

PHP 8 では、エラー処理がより厳格になりました。

  • 多くの警告が TypeError や ValueError に変更されました
  • 単純なチェックでは、正規表現の代わりに str_contains/starts_with/ends_with を使用します
  • 誤った引数の型を渡すと、デフォルトで TypeError がスローされます

実行時の ini_set

実行時に php.ini の設定を上書きします。

<?php
// Display errors during development
if (getenv('APP_ENV') === 'development') {
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
} else {
    ini_set('display_errors', '0');
    ini_set('log_errors', '1');
    error_reporting(E_ALL);
}

エラーレベルの確認

ビット単位の AND 演算子でエラーレベルを検出します。

<?php
$level = error_reporting();

if ($level & E_NOTICE) {
    echo 'Notices are reported';
}
if ($level & E_WARNING) {
    echo 'Warnings are reported';
}

// Check specific error types
echo (E_ALL & E_NOTICE) ? 'E_ALL includes E_NOTICE' : 'no';

エラーログのベストプラクティス

適切なエラーログの習慣:

  • 本番環境では常にエラーを記録します
  • ユーザー ID、リクエスト URL、タイムスタンプなどのコンテキストを含めます
  • 解析しやすいように、構造化ログ(JSON)を使用します
  • ディスク容量が使い果たされないよう、ログファイルをローテーションします
  • ELK、Datadog、Papertrail などのツールでログを監視します

理解度チェック

実行を直ちに停止させる PHP のエラータイプはどれですか。

まとめ:PHP のエラー報告

エラー処理の要点:

  • エラータイプ:Notice、Warning、Fatal、Parse、Deprecated
  • error_reporting() でレベルを設定します
  • 本番環境では表示をオフにし、ログをオンにします
  • set_error_handler() でカスタムハンドラーを登録します
  • 本番コードでは @ でエラーを抑制しないでください

よくある質問

「PHPのエラーの種類と報告」レッスンは無料ですか?

はい。「PHPのエラーの種類と報告」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「PHPのエラーの種類と報告」で何を学びますか?

notice、warning、fatal errorと、error_reportingのレベルを理解します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「PHPのエラーの種類と報告」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PHPのエラーの種類と報告
  2. Try、Catch、Finally
  3. カスタム例外の作成
  4. エラーのログ記録とベストプラクティス
← PHP Academyに戻る