Latest web development tutorials
×

PHP コース

PHP コース PHP 簡単な紹介 PHP インストール PHP 文法 PHP 変数 PHP echo/print PHP データの種類 PHP 定数 PHP 文字列 PHP 演算子 PHP If...Else PHP Switch PHP 配列 PHP 配列のソート PHP スーパーグローバル PHP While 循環 PHP For 循環 PHP 関数 PHP マジック変数 PHP 名前空間 PHP オブジェクト指向の

PHP フォーム

PHP フォーム PHP フォーム認証 PHP フォーム - 必要なフィールド PHP フォーム - 確認メールおよびURL PHP 完全なフォームインスタンス PHP $_GET 変数 PHP $_POST 変数

PHP 応用チュートリアル

PHP 多次元配列 PHP 日付 PHP 含みます PHP ファイル PHP ファイルのアップロード PHP Cookie PHP Session PHP E-mail PHP セキュリティ E-mail PHP Error PHP Exception PHP フィルタ PHP 高度なフィルタ PHP JSON

PHP 7 新機能

PHP 7 新機能

PHP データベース

PHP MySQL 簡単な紹介 PHP MySQL 接続 PHP MySQL データベースの作成 PHP MySQL データテーブルを作成します。 PHP MySQL データを挿入 PHP MySQL 複数のデータの挿入 PHP MySQL プリペアドステートメント PHP MySQL データを読みます PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX 簡単な紹介 AJAX PHP AJAX データベース AJAX XML AJAX 実時間探索 AJAX RSS Reader AJAX 投票

PHP リファレンスマニュアル

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP 画像処理 PHP RESTful

PHPのエラー処理

PHPでは、デフォルトのエラー処理は非常に簡単です。 エラーメッセージは、ブラウザ、ファイル名、行番号、エラーメッセージの記述を含むメッセージを送信します。


PHPのエラー処理

スクリプトとWebアプリケーションを作成する場合は、エラー処理は重要な部分です。 あなたのコードは、エラーチェックコードを欠いている場合は、あなたのプログラムは非常に専門外に見えるだけでなく、セキュリティリスクへの扉を開くことがあります。

このチュートリアルでは、PHPのエラー検出方法の中で最も重要なのいくつかを紹介します。

私たちはあなたの異なったエラー処理の方法を説明します:

  • シンプルな「ダイ() "文
  • カスタムエラーおよびエラーのトリガー
  • エラー報告

基本的なエラー処理:ダイ()関数を使用します

最初の例では、テキストファイルを開き、簡単なスクリプトを示しています。

<?php
$file=fopen("welcome.txt","r");
?>

ファイルが存在しない場合は、このようなエラーが発生します。

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in /www/w3big/test/test.php on line 2

上記のようなエラーメッセージを得ることからユーザーを防ぐために、我々は存在するファイルにアクセスする前にファイルを検討しました:

<?php
if(!file_exists("welcome.txt"))
{
	die("文件不存在");
}
else
{
	$file=fopen("welcome.txt","r");
}
?>

ファイルが存在しない場合さて、あなたは次のようにこのエラーメッセージが表示されます。

文件不存在

それがエラー後にスクリプトを終了するには、単純なエラー処理メカニズムを使用していますので、前のコードと比較すると、上記のコードは、より効率的です。

しかし、単にスクリプトは常に正しい方法ではありません終了します。 私たちは、エラーを処理するための代替のPHP関数を見てみましょう。


カスタムエラーハンドラの作成

カスタムエラーハンドラを作成することは非常に簡単です。 私たちは、単にエラーがPHPで発生したときに呼び出すことができる特別な関数を作成します。

この関数は、少なくとも二つのパラメータ(エラーレベルとエラーメッセージ)を処理できる必要がありますが、5までのパラメータを受け入れることができます(必要に応じて:ファイル、行番号とエラー・コンテキスト):

文法

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 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分)

それでは、エラーを処理する関数を作成してみましょう:

function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}

上記のコードは、単純なエラー処理機能です。 それがトリガされると、エラーレベルとエラーメッセージを取得します。 その後、エラーレベルとメッセージを出力して、スクリプトを終了します。

今、私たちはエラー処理関数を作成している、我々はときに機能を起動するかを決定する必要があります。


設定エラーハンドラ

PHPのデフォルトのエラーハンドラは、組み込みのエラーハンドラです。 私たちは、スクリプトのデフォルトのエラーハンドラの継続時間の上に変換関数をしようとしています。

それだけでいくつかのエラーに適用されるため、スクリプトが別のエラーを処理するためのさまざまな方法とすることができるようにするには、エラーハンドラを変更することができます。 しかしながら、この場合には、我々はすべてのエラーのエラーハンドラ我々の習慣のために使用します。

set_error_handler("customError");

我々はカスタム関数は、すべてのエラーを処理したいので、はset_error_handler()はパラメータを1つだけ必要な、エラー・レベルを指定するには、第二引数を追加することができます。

存在しない出力変数にしようとすると、エラーハンドラをテストします:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr";
}

// 设置错误处理函数
set_error_handler("customError");

// 触发错误
echo($test);
?>

次のように上記のコードの出力は、次のとおりです。

Error: [8] Undefined variable: test


トリガーエラー

スクリプトでエラーが有用であるときに、ユーザ入力がトリガされていないユーザー入力の位置データ。 PHPは、これは、完了するのでtrigger_error()関数によって行われます。

この例では、「テスト」変数は、エラーが発生し、「1」よりも大きい場合。

<?php
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1");
}
?>

次のように上記のコードの出力は、次のとおりです。

Notice: 变量值必须小于等于 1
in /www/test/w3big.php on line 5

あなたがエラーレベルがトリガされる指定することができ、二番目のパラメータを追加することで、どこでも、スクリプトでエラーをトリガすることができます。

エラーの可能なタイプ:

  • E_USER_ERROR - 致命的なユーザー生成された実行時エラー。 回復不能なエラー。 スクリプトの実行は中断されます。
  • E_USER_WARNING - 非致命的なユーザー生成の実行時の警告。 スクリプトの実行は中断されません。
  • E_USER_NOTICE - デフォルト。 ユーザーが生成した実行時の通知。 スクリプトが見つかったときにエラーが発生することがありますが、また、通常動作スクリプトで発生することがあります。

「試験」変数がより大きい場合、この例では、「1」は、E_USER_WARNINGエラーが発生します。 これはE_USER_WARNINGを発生した場合、我々は、カスタムエラーハンドラを使用して、スクリプトを終了します。

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

次のように上記のコードの出力は、次のとおりです。

Error: [512] 变量值必须小于等于 1
脚本结束

今、私たちは独自のエラーを作成する方法を学んできたこと、およびそれらをトリガーする方法、のエラーログを見てみましょう。


エラーログ

デフォルトの場合には、error_logの設定がphp.iniで設定されているによると、PHPは、記録するエラー記録システムやファイルサーバに送信します。 error_log()関数を使用することで、指定したファイルまたはリモート宛先にエラーログを送信することができます。

これは、特定のエラーの通知を受け取るための良い方法である電子メールで自分自身にエラーメッセージを送信します。

エラーメッセージが電子メールで送信されます

特定のエラーが発生した場合は、次の例では、我々は、エラーメッセージを表示して電子メールを送信してスクリプトを終了します。

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "已通知网站管理员";
	error_log("Error: [$errno] $errstr",1,
	"[email protected]","From: [email protected]");
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

次のように上記のコードの出力は、次のとおりです。

Error: [512] 变量值必须小于等于 1
已通知网站管理员

次のように上記のコードから受信したメッセージは、次のとおりです。

Error: [512] 变量值必须小于等于 1

このメソッドは、すべてのエラーには適していません。 従来のサーバーでエラーが記録するためのデフォルトのPHPのロギングシステムを使用してでなければなりません。