このチュートリアルでは、PHP の最も重要なエラー検出方法のいくつかについて説明します。
さまざまなエラー処理方法について説明します:
単純な「die()」ステートメント
カスタムエラーとエラートリガー
エラーレポート
基本的なエラー処理: die() 関数の使用
最初の例テキスト ファイル:
$file=fopen("welcome.txt","r");
警告: fopen(welcome.txt) [function.fopen]: ストリームを開けませんでした:
No such file or directory in C:webfoldertest.php on line 2ユーザーに上記のようなエラー メッセージが表示されないように、ファイルにアクセスする前にファイルが存在するかどうかを確認します。
die("ファイルが見つかりません");
}
else
{
$file=fopen("welcome.txt","r")
?>
现在,假如文件不存在,您会得到类似这样的错误消息:
File not found比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。
不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。
创建自定义错误处理器
创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 PHP 中发生错误时调用该函数。
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):
语法
error_function(error_level,error_message,
error_file,error_line,error_context)
参数 | 描述 |
---|---|
error_level |
必需。为用户定义的错误规定错误报告级别。必须是一个值数。 参见下面的表格:错误报告级别。 |
error_message | 必需。为用户定义的错误规定错误消息。 |
error_file | 可选。规定错误在其中发生的文件名。 |
error_line | 可选。规定错误发生的行号。 |
error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
错误报告级别
这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:
值 | 常量 | 描述 |
---|---|---|
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 的一部分) |
function CustomError($errno, $errstr)
{
echo "Error: b> [$errno] $errstr
";
echo "スクリプトの終了";
die();
}
上記のコードは単純なエラー処理関数です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。
エラー処理関数を作成したので、関数をいつ起動するかを決定する必要があります。
エラー ハンドラーを設定する
PHP のデフォルトのエラー ハンドラーは、組み込みのエラー ハンドラーです。スクリプトの実行時に、上記の関数をデフォルトのエラー ハンドラーに変換します。
エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:
set_error_handler("customError"); カスタム関数ですべてのエラーを処理する必要があるため、set_error_handler() パラメータは 1 つだけ必要です。 2 番目のパラメータを追加してエラー レベルを指定します。
例
存在しない変数を出力してこのエラー ハンドラーをテストします:
//エラー ハンドラー関数
function customError( $errno, $errstr)
{
echo "Error: [$errno] $errstr";
} // エラーハンドラーを設定します
set_error_handler("customError"); /trigger error
echo($test);
?>
上記のコードの出力は次のようになります:
Error: [8] 未定義の変数: テストはエラーをトリガーします
例
この例では、「test」変数が「1」より大きい場合、エラーが発生します:
コードをコピーします
trigger_error("値は 1 以下である必要があります")
?>
上記のコードの出力は次のようになります。注意: C:webfoldertest.php の 6 行目の値は 1 以下である必要があります。 スクリプト内の任意の場所でエラーをトリガーできます。2 番目のパラメーターを追加すると、トリガーされるエラー レベルを指定できます。
考えられるエラーの種類:
E_USER_ERROR - ユーザーが生成した致命的な実行時エラー。エラーは回復できません。スクリプトの実行が中断されました。
E_USER_WARNING - 致命的ではないユーザー生成の実行時警告。スクリプトの実行は中断されません。
例
この例では、「test」変数が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:
コードをコピー
コードは次のとおりです:
//エラー ハンドラー関数
"; echo "スクリプトの終了"
//トリガーエラー
if ($test>1)
{
trigger_error("値は 1 以下である必要があります",E_USER_WARNING);
}
?>
上記のコードの出力は次のようになります:
Error: [512] 値は 1 以下でなければなりません
スクリプトの終了 これで、独自のエラーを作成する方法とその方法を学びました。彼らを罰するために、エラー ログを調べてみましょう。
エラーログ
デフォルトでは、PHP は php.ini の error_log 設定に従って、エラーレコードをサーバーのエラーログシステムまたはファイルに送信します。 error_log() 関数を使用すると、指定したファイルまたはリモートの宛先にエラー レコードを送信できます。
電子メールでエラー メッセージを自分に送信することは、特定のエラーの通知を受け取るための優れた方法です。
エラー メッセージを電子メールで送信する
以下の例では、特定のエラーが発生した場合、エラー メッセージを含む電子メールを送信し、スクリプトを終了します:
コードをコピーします
コードは次のとおりです。
//エラーハンドラー関数
functioncustomError($errno, $errstr)
{
echo "Error: [$errno] $errstr
" ;
echo "ウェブマスターに通知されました";
error_log("エラー: [$errno] $errstr",1,
"someone@example.com","From: webmaster@example.com");
}
//エラーハンドラーを設定します
set_error_handler("customError",E_USER_WARNING);
//トリガーエラー
$test=2;
if ($test>1)
{
trigger_error("値は 1 以下である必要があります",E_USER_WARNING);
}
?>
上記のコードの出力は次のようになります:
エラー: [512] 値は 1 以下である必要があります
ウェブマスターに通知されました 上記のコードから受信した電子メールは次のようになります:
エラー: [512] ] 値は 1 以下である必要があります。1 つの方法がすべてのバグに適合するわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。
エラーバックトレース
定義と使用法
PHP debug_backtrace() 関数はバックトレースを生成します。
この関数は連想配列を返します。返される可能性のある要素は次のとおりです:
名前 | タイプ | 説明 |
---|---|---|
機能 | 文字列 | 現在の関数名。 |
ライン | 整数 | 現在の行番号。 |
ファイル | 文字列 | 現在のファイル名。 |
class | 字符串 | 当前的类名 |
object | 对象 | 当前对象。 |
type | 字符串 | 当前的调用类型,可能的调用:
|
args | 数组 | 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。 |
debug_backtrace() の例
function one($str1, $str2)
{
two("Glenn", "Quagmire");
}
function two($str1, $str2)
{
three("クリーブランド", "ブラウン");
}
関数 3($str1, $str2)
{
print_r(debug_backtrace());
}
one("ピーター"、"グリフィン");
?>
出力:
Array
(
[0] => Array
(
[file] => C:webfoldertest.php
[line] => 7
[function] => 3
[ args] => 配列
(
[0] => クリーブランド
[1] => ブラウン
)
)
[1] => 配列
(
[file] => C:webfoldertest.php
[行] => 3
[関数] => 2
[引数] => 配列
(
[0] => グレン
[1] => 泥沼
)
[2] => 配列
(
[ファイル] => C:webfoldertest.php
[行] => 14
[関数] => 1 つ
[引数] => 配列
(
[0] => ; ピーター
[1] =>
)
)
)

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

この記事では、PHPについて説明し、その完全なフォーム、Web開発での主要な使用、PythonとJavaとの比較、および初心者の学習のしやすさについて説明します。

PHPは、$ \ _ postおよび$ \ _を使用してフォームデータを処理し、検証、消毒、安全なデータベースインタラクションを通じてセキュリティを確保します。

この記事では、PHPとASP.NETを比較して、大規模なWebアプリケーション、パフォーマンスの違い、セキュリティ機能への適合性に焦点を当てています。どちらも大規模なプロジェクトでは実行可能ですが、PHPはオープンソースであり、プラットフォームに依存しませんが、ASP.NET、

PHPの症例感度は変化します:関数は鈍感であり、変数とクラスは感度があります。ベストプラクティスには、一貫した命名と、比較のためにケース非感受性関数を使用することが含まれます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









