PHPの例外処理、エラースローとエラーコールバック関数、例外処理コールバック関数
1. エラー、例外レベル定数テーブル
エラー: コンパイル中に見つからない実行時エラー。割り当てられていない変数を出力するには、エコーを使用することをお勧めします。この種の問題により、プログラムまたはロジックが続行できなくなり、中断する必要が生じます。
例外: ロジックは実行可能ですが、アプリケーションのシナリオを満たさないことがよくあります。そのため、例外は主に次のようなものに依存します。コード作成者は、判断後にスローし、例外をキャッチして、プログラムを中断せずにこれらの状況に対処できるようにプログラム フローを変更する必要があります。PHP の例外とエラーの定義は、特に古いバージョンの PHP ではあまり明確ではないようです。
录 エラーとログレコードの値
1 E_ERROR (整数) 致命的な実行時エラー。 |このタイプのエラーは、メモリ割り当てによって引き起こされる問題など、通常は回復不可能な状況です。その結果、スクリプトが終了し、実行が続行されなくなります。
4 E_PARSE (整数) コンパイル時の構文解析エラー。 |解析エラーはパーサーによってのみ生成されます。
8 E_NOTICE (整数) 実行時通知。 スクリプトがエラーとして表示される可能性のある状況に遭遇することを示しますが、正常に実行できるスクリプトに同様の通知がある場合もあります。
16 E_CORE_ERROR(整数) PHP の初期化および起動中に致命的なエラーが発生しました。 |このエラーは E_ERROR に似ていますが、PHP エンジン コアによって生成されます。 PHP 4 以降
32 E_CORE_WARNING(integer) PHP 初期化起動時に発生した警告 (致命的ではないエラー)。 |E_WARNING に似ていますが、PHP エンジン コアによって生成されます。 PHP 4 以降
64 E_COMPILE_ERROR(整数) 致命的なコンパイル時エラー。 |E_ERROR に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4 以降
128 E_COMPILE_WARNING(整数) コンパイル時間の警告 (致命的ではないエラー)。 |E_WARNING に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4 以降
256 E_USER_ERROR(整数) ユーザーによって生成されたエラー メッセージ。 |E_ERROR に似ていますが、ユーザーがコード内で PHP 関数trigger_error()を使用して生成されます。 PHP 4 以降
512 E_USER_WARNING(整数) ユーザーによって生成された警告メッセージ。 |E_WARNING に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4 以降
1024 E_USER_NOTICE(整数) ユーザーが生成した通知情報。 |E_NOTICE に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4 以降
2048 E_STRICT (整数) コード変更に対する PHP の提案を有効にします。 | PHP 5 以降、コードに最適な相互運用性と上位互換性があることを確認します
4096 E_RECOVERABLE_ERROR(整数) 捕捉できる致命的なエラー。 |これは、潜在的に危険なエラーが発生したが、まだ PHP エンジンが不安定な状態になっていないことを示します。エラーがユーザー定義のハンドルで捕捉されない場合 (「 set_error_handler()) を参照してください。これは E_ERROR となり、スクリプトは終了します。 PHP 5.2.0以降
8192 E_DEPRECATED(整数) 実行時通知。 | 有効にすると、将来のバージョンで正しく動作しなくなる可能性があるコードに対して警告が表示されます。 PHP 5.3.0以降
16384 E_USER_DEPRECATED(整数) 家計資産が低い場合の警告メッセージ。 |E_DEPRECATED に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 5.3.0以降
30719 E_ALL (整数) E_STRICT すべてのエラーおよび警告メッセージ。
*PHP 5.3.x では 30719、PHP 5.2.x では 6143、以前は 2047
2. error_reporting() と try-catch がスローされる
error_reporting() 関数は、(パラメーターが渡されない場合) スクリプトが処理する例外を取得および設定できます (すべての例外を処理する必要はありません。たとえば、E_CORE_WARNING、E_NOTICE、E_DEPRECATED は無視できます)。この設定は php を上書きします。 ini error_reporting オプションで定義された例外処理設定。
例:
リーリー
try-catch は、クラスの自動ロード関数 __autoload() 内では有効になりません。
try-catch は、trigger_error() によって引き起こされるエラーなど、例外をキャッチするために使用されます。


例:


例外クラス構造: ほとんどのメソッドは書き換えが禁止されています(最終)


拡張例外クラス
try-catch には複数の catch 句を含めることができます。最初の catch 句から始めて、句内の例外変数の型が throw ステートメントによってスローされた例外の型と一致する場合、その句が実行され、他の catch は実行されません。例外はすべての例外クラスの基本クラスであるため、異なる例外の種類に応じて異なる処理メソッドを使用する必要がある場合は、Exception タイプの catch を使用する必要があります。句は最後に置かれます。
Exception はすべての例外の基本クラスであり、実際のニーズに応じて例外クラスを拡張できます


catch 句で例外の種類を決定したり、コードなどの情報に基づいて例外を処理するかどうかを決定したりできます。catch 句で記述したコードがキャッチした例外を適切に処理できない場合は、catch 句内で続行できます。 . 例外をスローします。
3. 例外コールバック関数


例外コールバック関数は、set_error_handler のコールバック関数のように true を返して例外を解消することはできません。そのため、コールバック関数が例外を処理しても、後続のコードは実行されません。 try-catch を使用する必要があります。try-catch 内でキャッチされた例外は Exception_handler をトリガーしません。
ただし、例外があります。スローされた例外が処理されない場合でも、スクリプト終了コールバック関数は実行できます。
register_shutdown_function(コールバック関数名[,引数1,引数2,...]);
例:

<span>function</span><span> shutdownfunction(){ </span><span>echo</span> 'script is end'<span>; } </span><span>register_shutdown_function</span>("shutdownfunction");

因为 shutdownfunction() 在脚本结束时被执行,所以 这个回调函数之内可以调用脚本中任意位置的函数,即使该函数定义在 错误抛出位置之后(函数定义是在 脚本编译期完成的)。
四、trigger_error(string errorMsg[,int user_error_type])
该函数用于主动触发一个错误: user_error_type 只能是 E_ALL、E_USER_ERROR、 E_USER_WARNING、 E_USER_NOTICE 或其组合的值。
注册 error (包括系统抛出的 Error 和 用户抛出的 Error )的处理函数和消除 error:
<span>set_error_handler</span>(<span>callback</span> functionName[,user_error_type]); <span>//</span><span> 为 trigger_error() 设置一个回调函数来处理错误,包括系统抛出的错误和用户使用 trigger_error() 函数触发的错误。</span>
可选参数 user_error_type :
如果设定此参数,则 trigger_error 抛出的错误类型符合 在user_error_type 的定义范围才能触发回调函数。
这个值的设置类似于 error_reporting() 函数 。
第一个参数(callbeck functionName):
一个函数名,该函数 可以有 5 个参数,其中前 2 个必选,依次是:
trigger_error 抛出的 user_error_type、trigger_error 抛出的 errorMsg、抛出错误的文件的绝对路劲、抛出错误的行号、抛出错误时的上下文环境 (一个数组,包含了trigger_error() 所在作用域内的所有变量、函数、类等数据 )
回调函数的返回值: 如果返回 false ,系统错误处理机制仍然继续抛出该错误,返回 true 或 无返回值 则消除错误。
你可以使用 set_error_handler() 来将 PHP 程序 抛出的错误代理给 ErrorException使错误可以类似异常那样显示:

<span>function</span> error_handler(<span>$errorType</span>, <span>$errorMsg</span>, <span>$errorFile</span>, <span>$errorLine</span><span> ) { </span><span>echo</span> '<div>; </span><span>throw</span> <span>new</span> ErrorException(<span>$errorMsg</span>, 0, <span>$errorType</span>, <span>$errorFile</span>, <span>$errorLine</span><span>); } </span><span>set_error_handler</span>('error_handler'<span>); </span><span>count</span>();

用户使用 trigger_error() 触发的错误不会被 try-catch 异常捕获语句捕获。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
