最新のWeb開発のチュートリアル
×

PHP チュートリアル

PHP HOME PHP イントロ PHP インストール PHP 構文 PHP 変数 PHP エコー/印刷 PHP データの種類 PHP ストリング PHP 定数 PHP 演算子 PHP If...Else...Elseif PHP Switch PHP whileループ PHP Forループ PHP 機能 PHP 配列 PHP 配列のソート PHP スーパーグローバル

PHP 取り扱い

PHP フォーム 取り扱い PHP フォーム 検証 PHP フォーム 必須 PHP フォーム URL/E-mail PHP フォーム コンプリート

PHP 高度な

PHP 多次元配列 PHP 日時 PHP 含めます PHP ファイル 取り扱い PHP ファイル オープン/読みます PHP ファイル 作成/書きます PHP ファイル アップロード PHP Cookies PHP Sessions PHP フィルター PHP Filters 高度な PHP エラー 取り扱い PHP 例外

MySQL Database

MySQL データベース MySQL 接続 MySQL Create DB MySQL Create 表 MySQL Insert Data MySQL 最後のIDを取得します MySQL 複数の挿入 MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML パーサー PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX イントロ AJAX PHP AJAX データベース AJAX XML AJAX ライブ検索 AJAX RSSリーダー AJAX 世論調査

PHP Examples

PHP 例 PHP クイズ PHP 証明書

PHP 参照

PHP アレイ PHP カレンダー PHP 日付 PHP ディレクトリ PHP エラー PHP ファイルシステム PHP フィルタ PHP FTP PHP HTTP PHP Libxml PHP 郵便物 PHP 数学 PHP その他 PHP MySQLiを PHP SimpleXML PHP 文字列 PHP XML PHP Zip PHP 時間帯

 

PHPエラー処理


PHPのデフォルトのエラー処理は非常に簡単です。 ファイル名、行番号とエラーを説明するメッセージとエラーメッセージがブラウザに送信されます。


PHPのエラー処理

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

このチュートリアルでは、PHPのメソッドをチェックする最も一般的なエラーの一部が含まれています。

我々は、さまざまなエラー処理方法が表示されます:

  • シンプルな" die() "ステートメント
  • カスタムエラーとエラーのトリガー
  • エラー報告

基本的なエラー処理:使用するdie()関数を

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

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

ファイルが存在しない場合は、このようなエラーを受け取ることがあります。

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

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

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

ファイルが存在しない場合は今、あなたは、このようなエラーが表示されます。

File not found

それは、エラーの後にスクリプトを停止するには、単純なエラー処理メカニズムを使用しているため、上記のコードは、以前のコードよりも効率的です。

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


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

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

この関数は、2つのパラメータ(エラーのレベルとエラーメッセージ)の最小値を扱うことができなければならないが、5つのパラメータまで受け入れることができる(optionally: file, line-number, and the 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 非致命的なランタイムエラー。 スクリプトの実行が停止されていません
8 E_NOTICE 実行時に通知。 スクリプトはエラーであるかもしれない何かを発見したが、通常のスクリプトを実行している場合にも起こる可能性
256 E_USER_ERROR 致命的なユーザー生成エラー。 これは、PHPの関数使用して、プログラマによって設定されたE_ERRORに似ているtrigger_error()
512 E_USER_WARNING 非致命的なユーザー生成警告。 これは、PHPの関数使用して、プログラマによって設定されたE_WARNINGに似ているtrigger_error()
1024 E_USER_NOTICE ユーザー生成の通知。 これは、PHPの関数使用して、プログラマによって設定されたE_NOTICEのようなものですtrigger_error()
4096 E_RECOVERABLE_ERROR キャッチ可能な致命的なエラー。 これは、E_ERRORに似ていますが、ユーザ定義のハンドルによってキャッチすることができます(see also set_error_handler()
8191 E_ALL すべてのエラーと警告(E_STRICT became a part of E_ALL in PHP 5.4)

今すぐエラーを処理する関数を作成することができます:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

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

今、私たちはエラー処理機能を作成していることを我々はそれがトリガーされなければならない時に決定する必要があります。


設定されたエラーハンドラ

PHPのデフォルトのエラーハンドラがエラーハンドラ内で構築されています。 私たちは、スクリプトの期間中、デフォルトのエラーハンドラ上記の関数を作成しようとしています。

それだけでいくつかのエラーを申請するエラーハンドラ、スクリプトは異なる方法で異なるエラーを処理することができ、その方法を変更することが可能です。 しかし、この例では、我々はすべてのエラーのために私たちのカスタムエラーハンドラを使用しようとしています。

set_error_handler("customError");

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

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

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

上記のコードの出力は次のようなものでなければなりません。

Error: [8] Undefined variable: test

エラーをトリガ

ユーザーが入力することができるデータスクリプトでは、不正入力が発生したときにエラーを誘発するのに有用です。 PHPでは、これはによって行われるtrigger_error()関数。

この例では、エラーが発生した場合"test"変数がより大きい"1"

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

上記のコードの出力は次のようなものでなければなりません。

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

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

可能性のあるエラーの種類:

  • E_USER_ERROR - 致命的なユーザー生成実行時エラー。 から回収することができないエラー。 スクリプトの実行が停止され
  • E_USER_WARNING - 非致命的なユーザー生成の実行時の警告。 スクリプトの実行が停止されていません
  • E_USER_NOTICE - デフォルト。 ユーザーが生成した実行時の通知。 スクリプトはエラーであるかもしれない何かを発見したが、通常のスクリプトを実行している場合にも起こる可能性

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

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

上記のコードの出力は次のようなものでなければなりません。

Error: [512] Value must be 1 or below
Ending Script

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


エラーログ

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

電子メールで自分自身にエラーメッセージを送信すると、特定のエラーの通知を取得する良い方法することができます。

Eメールでエラーメッセージを送信

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

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

上記のコードの出力は次のようなものでなければなりません。

Error: [512] Value must be 1 or below
Webmaster has been notified

そして、上記のコードから受信したメールは、次のようになります。

Error: [512] Value must be 1 or below

これは、すべてのエラーで使用すべきではありません。 定期的なエラーは、デフォルトのPHPのロギングシステムを使用してサーバーにログオンする必要があります。