検索
ホームページバックエンド開発PHPチュートリアルPHP のエラー処理および例外処理メカニズムを解決する方法

この記事では、PHP のエラー処理と例外処理メカニズムを解決する方法を説明します。必要な方は参考にしてください。PHP プログラムを作成する場合、エラー処理は重要な部分です。プログラムにエラー検出コードが不足している場合、非常にプロフェッショナルに見えず、セキュリティ リスクへの扉が開かれます

例:

<?php
    $a = fopen(&#39;test.txt&#39;,&#39;r&#39;);
    //这里并没有对文件进行判断就打开了,如果文件不存在就会报错
?>

その場合、正しい記述は次のようになります:

<?php
    if (file_exists(&#39;test.txt&#39;)) {
        $f = fopen(&#39;test.txt&#39;, &#39;r&#39;);
        // 使用完后关闭
        fclose($f);
    }
?>

1. 3 つの方法PHP エラー処理の A. 単純な die() ステートメントは、exit() と同等です。 1. エラー ハンドラー (通常、構文エラーの処理に使用されます)

カスタム エラー関数を作成します。 (ハンドラー)。関数は少なくとも 2 つのパラメーター (error_level と errormessage) を処理できる必要がありますが、最大 5 つのパラメーター (error_file、error_line、error_context) を受け入れることができます構文:

if (!file_exists(&#39;aa.txt&#39;)) {
    die(&#39;文件不存在&#39;);
} else {
    // 执行操作
}
// 如果上面die()被触发,那么这里echo接不被执行
echo &#39;ok&#39;;

エラー報告レベル (理解してください)

これらのエラー報告レベルは、エラー ハンドラーが処理するように設計されているさまざまなタイプのエラーです:

file_exits(&#39;aaa.txt&#39;) or die(&#39;文件不存在&#39;);
echo &#39;ok&#39;;

2. エラー トリガー (通常、論理エラーを処理するために使用されます)

要件: たとえば、年齢を受け取りたい場合、数値が 120 より大きい場合、エラーとみなされます従来の方法:

function error_function($error_level, $error_message, $error_file, $error_line, $error_context)
// 创建好后还需要改写set_error_handler();函数
set_error_handler(&#39;error_function&#39;, E_WARNING); // 这里error_function对应上面创建的自定义处理器名,第二个参数为使用自定义错误处理器的错误级别;

トリガーの使用:

值        常量                                  描述
2    E_WARNING    非致命的 run-time 错误。不暂停脚本执行。    
8    E_NOTICE    Run-time 通知。脚本发现可能有错误发生,但也可能在脚本正常运行时发生。    
256    E_USER_ERROR    致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。    
512    E_USER_WARNING    非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。    
1024    E_USER_NOTICE    用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。    
4096    E_RECOVERABLE_ERROR    可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())    
8191    E_ALL    所有错误和警告,除级别 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

演習問題:

<?php
if ($age > 120) {
    echo &#39;年龄错误&#39;;
    exit();
}
?>

C. エラーログ

デフォルトでは、php の error_log 設定に従っています。 .ini、PHP はエラー レコードをサーバーのエラー記録システムまたはファイルに送信します。エラー レコードは、error_log() 関数を使用してファイルまたはリモートの宛先に送信できます。 構文:

<?php
if ($age > 120) {
    // trigger_error(&#39;错误信息&#39;[,&#39;错误等级&#39;]); 这里错误等级为可选项,用于定义该错误的级别
    // 用户定义的级别包含以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE
    trigger_error(&#39;年龄错误&#39;); // 这里是调用的系统默认的错误处理方式,我们也可以用自定义处理器
}
 
/**
 * 自定义处理器,与上面相同
 */
function myerror($error_level, $error_message) {
    echo &#39;error text&#39;;
}
 
//  同时需要改变系统默认的处理函数
set_error_handler(&#39;myerror&#39;, E_USER_WARNING); // 同上面,第一个参数为自定义函数的名称,第二个为错误级别【这里的错误级别通常为以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE】
// 现在再使用trigger_error就可以使用自定义的错误处理函数了
?>

タイプ部分は通常 3 で、元のコンテンツの宛先を上書きせずにファイルの後にエラー情報を追加することを意味します。それは、保存されたファイルまたはリモート宛先です

など: error_log("$error_info",3,"errors.txt");

2. PHP 例外処理 [重要なポイント]

1. 基本的な構文

<?php
date_default_timezone_set(&#39;PRC&#39;);
function myerror($error_level, $error_message) {
    $info = "错误号:$error_level";
    $info .= "错误信息:$error_message";
    $info .= &#39;发生时间:&#39; . date(&#39;Y-m-d H:i:s&#39;);
    $filename = &#39;aa.txt&#39;;
    if (!$fp = fopen($filename, &#39;a&#39;)) {
        echo &#39;创建文件&#39; . $filename . &#39;失败&#39;;
    }
    if (is_writeable($filename)) {
        if (!fwrite($fp, $info)) {
            echo &#39;写入文件失败&#39;;
        } else {
            echo &#39;已成功记录错误信息&#39;;
        }
        fclose($fp);
    } else {
        echo &#39;文件&#39; . $filename . &#39;不可写&#39;;
    }
    exit();
}
 
set_error_handler(&#39;myerror&#39;, E_WARNING);
$fp = fopen(&#39;aaa.txt&#39;, &#39;r&#39;);
?>

2.処理 プログラムには以下を含める必要があります:

try - 例外を使用する関数は、「try」コード ブロック内に配置する必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。 throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります。 - 「キャッチ」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します。

error_log(error[, type, destination, headers])

上記のコードは次のようなエラーを受け取ります:

メッセージ: 値は 1 以下である必要があります

説明例:

上記のコードは例外をスローし、それをキャッチします:

checkNum() 関数を作成します。数値が 1 より大きいかどうかを確認し、1 より大きい場合は例外をスローします。

「try」コードブロックでcheckNum()関数を呼び出します。

checkNum()関数で例外がスローされます。

「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。

この例外オブジェクトから $e->getMessage() を呼び出して、この例外からのエラー メッセージを出力します。

ただし、「各スローはキャッチに対応する必要がある」という原則に従うために、見逃したエラーを処理する最上位の例外ハンドラーをセットアップできます。

set_Exception_handler() 関数は、キャッチされなかった例外をすべて処理するユーザー定義関数を設定できます。

<?php
try {
    // 可能出现错误或异常的代码
    //catch 捕获  Exception是PHP已定义好的异常类
} catch (Exception $e) {
    // 对异常处理,方法:
    //1、自己处理
    //2、不处理,可以再次抛出 throw new Exception(&#39;xxx&#39;);
}
?>

カスタム例外クラスを作成する

?php
/**
 * 创建可抛出一个异常的函数
 */
function checkNum($number) {
    if ($number > 1) {
        throw new Exception("Value must be 1 or below");
    }
 
    return true;
}
 
// 在 "try" 代码块中触发异常
try {
    checkNum(2);
    // 如果异常被抛出,那么下面一行代码将不会被输出
    echo &#39;If you see this, the number is 1 or below&#39;;
} catch (Exception $e) {
    // 捕获异常
    echo &#39;Message: &#39; . $e->getMessage();
}
?>

複数の catch を使用して、さまざまな状況でエラー メッセージを返すことができます

<?php
/**
 * 设置一个顶级异常处理器
 */
function myexception($e) {
    echo &#39;this is top exception&#39;;
}
 
// 修改默认的异常处理器
set_exception_handler("myexception");
try {
    $i = 5;
    if ($i < 10) {
        throw new Exception(&#39;$i must greater than 10&#39;);
    }
} catch (Exception $e) {
    // 处理异常
    echo $e->getMessage() . &#39;<br/>&#39;;
 
    // 不处理异常,继续抛出
    throw new Exception(&#39;errorinfo&#39;); // 也可以用throw $e 保留原错误信息;
}
?>

例外ルール

潜在的な異常のキャプチャを容易にするために、例外処理を必要とするコードは try コード ブロックに配置する必要があります。

各 try または throw コード ブロックには、対応する catch コード ブロックが少なくとも 1 つ必要です。

複数の catch ブロックを使用して、さまざまな種類の例外をキャッチします。

例外は、try コード内の catch コード ブロックで再スローできます。

要するに: 例外がスローされた場合は、それをキャッチする必要があります。

以上がPHP のエラー処理および例外処理メカニズムを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

PHPセッションにユーザーの名前を保存する方法の例を挙げてください。PHPセッションにユーザーの名前を保存する方法の例を挙げてください。Apr 26, 2025 am 12:03 AM

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター