亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

PHPエラー処理

PHP では、デフォルトのエラー処理は簡単です。ファイル名、行番號(hào)、およびエラーを説明するメッセージを含むエラー メッセージがブラウザに送信されます。


PHP エラー処理

エラー処理は、スクリプトや Web アプリケーションを作成する際の重要な部分です。コードにエラー検出コーディングが欠けていると、プログラムは専門的ではないように見え、セキュリティ リスクへの扉が開かれてしまいます。

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

さまざまなエラー処理方法について説明します:

?単純な「die()」ステートメント

?カスタムエラーとエラートリガー

?エラーレポート


基本エラー処理: die() 関數(shù)の使用

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

<?php
$open=fopen('error.txt','r');
echo $open;
?>

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

警告: fopen(error.txt) [function.fopen]: ストリームを開けませんでした:
/www/php/test/test.php の 2 行目にそのようなファイルまたはディレクトリはありません

回避するにはユーザーが上記のようなエラー メッセージを受け取る場合、ファイルにアクセスする前にファイルが存在するかどうかを確認(rèn)します:

<?php
header("Content-type:text/html;charset=utf-8");
if(!file_exists('error.txt')){
    die("文件不存在");
}else{
    $file=fopen('error.txt','r');
}
?>

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

ファイルが存在しません

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

ただし、単にスクリプトを終了することが常に適切なアプローチであるとは限りません。エラーを処理するための代替 PHP 関數(shù)を調(diào)べてみましょう。


カスタム エラー ハンドラーを作成する

カスタム エラー ハンドラーの作成は非常に簡単です。 PHP でエラーが発生したときに呼び出せる専用の関數(shù)を作成しただけです。

関數(shù)は少なくとも 2 つのパラメータ (エラー レベルとエラー メッセージ) を処理できる必要がありますが、最大 5 つのパラメータ (オプション: ファイル、行番號(hào)、エラー コンテキスト) を受け入れることができます。 、エラーメッセージ、エラーファイル、エラーライン、エラーコンテキスト)


必須。ユーザー定義エラーのエラー報(bào)告レベルを指定します。數(shù)値である必要があります。以下の表を參照してください: エラー報(bào)告レベル。 error_message必須。ユーザー定義エラーのエラー メッセージを指定します。
パラメータ 説明


error_level

error_fileオプション。エラーが発生したファイル名を指定します。 error_line オプション。エラーが発生した行番號(hào)を指定します。 error_context オプション。エラーが発生したときに使用されていた各変數(shù)とその値を含む配列を指定します。

エラーレポートレベル

これらのエラーレポートレベルは、さまざまな種類のエラーを処理するユーザー定義のエラーハンドラーです:

致命的ではない実行時(shí)エラー。スクリプトの実行を一時(shí)停止しないでください。 N _ 8e_noticeE_USER_ERRORE_USER_WARNING 致命的ではないユーザー生成の警告。これは、プログラマが PHP 関數(shù) trigger_error() を使用して設(shè)定する E_WARNING に似ています。
定數(shù) 説明 2E_WARNING

実行時(shí)通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。

256

致命的なユーザー生成エラー。これは、プログラマが PHP 関數(shù)trigger_error()を使用して設(shè)定する E_ERROR に似ています。

512


<pre id="njvdl"></pre>

<abbr id="njvdl"></abbr>

1024


E_USER_NOTICE

ユーザーが生成した通知。これは、プログラマが PHP 関數(shù)trigger_error() を使用して設(shè)定する E_NOTICE に似ています。

4096



E_RECOVERABLE_ERROR

キャッチ可能な致命的なエラー。 E_ERROR と似ていますが、ユーザー定義のハンドラーによってキャッチされる可能性があります。 (set_error_handler())を參照してください(PHP 5.4 では、E_STRICT は E_ALL の一部になります)

さて、エラーを処理する関數(shù)を作成しましょう:

<?php
header("Content-type:text/html;charset=utf-8");
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "腳本結(jié)束";
    die();
}
?>

上記のコードは、単純なエラー処理関數(shù)です。トリガーされると、エラー レベルとエラー メッセージが取得されます。次に、エラー レベルとメッセージを出力し、スクリプトを終了します。

エラー処理関數(shù)を作成したので、関數(shù)をいつ起動(dòng)するかを決定する必要があります。


エラーハンドラーを設(shè)定する

PHPのデフォルトのエラーハンドラーは、組み込みエラーハンドラーです。スクリプトの実行時(shí)に、上記の関數(shù)をデフォルトのエラー ハンドラーに変換します。

エラー ハンドラーは、特定のエラーにのみ適用されるように変更できるため、スクリプトはさまざまな方法でさまざまなエラーを処理できます。ただし、この場合、すべてのエラーに対してカスタム エラー ハンドラーを使用します:

set_error_handler("customError");

カスタム関數(shù)ですべてのエラーを処理したいため、set_error_handler() に必要なのは1 つのパラメーターに、2 番目のパラメーターを追加してエラー レベルを指定できます


上記で學(xué)んだ知識(shí)を組み合わせて、存在しない変數(shù)を出力してこのエラー ハンドラーをテストしてみます:

<?php
header("Content-type:text/html;charset=utf-8");
// 錯(cuò)誤處理函數(shù)
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr";
}
// 設(shè)置錯(cuò)誤處理函數(shù)
set_error_handler("customError");
// 觸發(fā)錯(cuò)誤
echo($test);
//關(guān)閉了所有的錯(cuò)誤顯示
error_reporting(0);
//顯示所有錯(cuò)誤
//error_reporting(E_ALL);
//顯示所有錯(cuò)誤,但不顯示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>

プログラムの実行結(jié)果:

エラー: [8] 未定義の変數(shù): test

実行結(jié)果は、エラーレベルが 8 であることを示し、エラーメッセージは次のとおりです: 存在しない変數(shù)


エラーのトリガー

ユーザーがデータを入力するスクリプトの時(shí)點(diǎn)で、ユーザーの入力が無効な場合にエラーをトリガーすると便利です。 PHP では、このタスクは trigger_error() 関數(shù)によって実行されます。

この例では、「test」変數(shù)が「1」より大きい場合、エラーが発生します:

<?php
header("Content-type:text/html;charset=utf-8");
$test=2;
if ($test>1)
{
    trigger_error("變量值必須小于等于 1");
}
?>

プログラムの実行結(jié)果:

注意: 変數(shù)の値はそれより小さくなければなりませんD :WWWAdvancedtutorialerrorerror_1.php の 6 行目以上 1


2 番目のパラメーターを追加すると、トリガーされるエラー レベルを指定できます。

考えられるエラーの種類:

· E_USER_ERROR - ユーザーが生成した致命的な実行時(shí)エラー。エラーは回復(fù)できません。スクリプトの実行が中斷されました。

· E_USER_WARNING - 致命的ではないユーザー生成の実行時(shí)警告。スクリプトの実行は中斷されません。

· E_USER_NOTICE - デフォルト。ユーザーが生成した実行時(shí)通知。スクリプトがエラーの可能性を検出したときに発生しますが、スクリプトが正常に実行されているときにも発生する可能性があります。


この例では、「test」変數(shù)が「1」より大きい場合、E_USER_WARNING エラーが発生します。 E_USER_WARNING が発生した場合、カスタム エラー ハンドラーを使用してスクリプトを終了します:

<?php
header("Content-type:text/html;charset=utf-8");
// 錯(cuò)誤處理函數(shù)
function customError($errno, $errstr)
{
    echo "<b>Error:</b> [$errno] $errstr<br>";
    echo "腳本結(jié)束";
    die();
}
// 設(shè)置錯(cuò)誤處理函數(shù)
set_error_handler("customError",E_USER_WARNING);
// 觸發(fā)錯(cuò)誤
$test=2;
if ($test>1)
{
    trigger_error("變量值必須小于等于 1",E_USER_WARNING);
}
?>

プログラム実行結(jié)果:

エラー: [512] 変數(shù)値は 1 以下である必要があります
スクリプト終了

実行中結(jié)果 エラーレベルの値が512であることを教えてください。エラーメッセージは、trigger_error関數(shù)で設(shè)定したプロンプトメッセージになります


エラーログ

一部の企業(yè)では、特別なログ収集がありますシステム。ログ収集システムは、エラー、警告、プロンプトをバックグラウンドで収集するのに役立ちます。

専用のログ収集システムを持たず、サーバーから実行ログをファイル経由で収集している企業(yè)もあります。

その中には、PHP エラー、警告を受信する必要があります。

次に、ユーザーに表示が許可されておらず、エラー報(bào)告レベルが設(shè)定されている場合、ログ システムにエラーを収集するにはどうすればよいでしょうか?という疑問が生じます。

php.ini で使用する必要がある関連する設(shè)定項(xiàng)目は次のとおりです。これら 2 つの設(shè)定項(xiàng)目は次のとおりです:

エラーメッセージの種類 説明
0 デフォルトの error_log の指定場所
1 指定したメールの場所に送信します
3指定したファイルの場所に送信します

<?php
//無法連接到數(shù)據(jù)庫服務(wù)器,直接記錄到php.ini 中的error_log指定位置
error_log("無法連接到數(shù)據(jù)庫服務(wù)器服務(wù)器");
//可以發(fā)送郵件,但是php.ini必須配置過郵件系統(tǒng)
error_log('可以用郵件報(bào)告錯(cuò)誤,讓運(yùn)維人員半夜起床干活',1 ,'liwenkai@phpxy.com');
//記錄在指定的位置
error_log("我是一個(gè)錯(cuò)誤喲", 3, "d:/test/my-errors.log");
?>

インスタンス

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

プログラムの実行結(jié)果:

エラー: [512] 値は 1 以下である必要があります
ウェブマスターに通知されました


上記のコードから受信したメールは次のようなものです:

エラー: [512] 値は 1 以下である必要があります


このメソッドはすべてのエラーに適しているわけではありません。一般的なエラーは、デフォルトの PHP ログ システムを使用してサーバーに記録される必要があります。

注:

error_log でのメールの送信は初心者にとって馴染みのないものであるため、ある程度の知識(shí)を習(xí)得する必要はありません。


error_reporting レポートエラータイプ

error_reporting は、エラーレポートを指します。 php.iniにもそのようなパラメータがあります。このパラメータ。 PHP エンジンが記録、レポート、表示するエラーのタイプを決定します。

1. php.ini の error_reporting パラメーター。 error_reporting パラメータが 0 に設(shè)定されている場合。 PHP エンジン全體のエラーは表示、出力、または記録されません。次の章で説明するログには記録されません。

すべてのエラーを表示したい場合は、次のように記述できます:

error_reporting = E_ALL

プロンプトを除外してすべてのエラーを表示したい場合は、このパラメータを次のように記述できます:

error_reporting = E_ALL & ~ E_NOTICE

すべてのエラーを表示しますが、ヒント、互換性、將來の互換性は除きます。次のように記述できます:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

2. 場合によっては、php.ini ファイルを操作する権限がない場合があります。 error_reporting を制御したいのですが、どうすればよいでしょうか?

xxxx.php ファイルの実行の開始時(shí)に、error_reporting() 関數(shù)を使用して目標(biāo)を達(dá)成できます。

<?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,
         "someone@example.com","From: webmaster@example.com");
 }
 
 //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);
 }
 ?>

上記のコードを試してみたり、意図的に間違ったコードを書いて試してみたりすることもできます。指定されたエラーが現(xiàn)在のファイルに表示されるかどうか。

[知識(shí)ポイントを拡張して理解する]:

@

記號(hào)は以前に學(xué)習(xí)した、エラーが表示されない単一行です。@ 記號(hào)は使用しないか、控えめに使用してください。


インスタンス

この PHP コードを使用して存在しないファイルを読み取り、実裝プロセスを示してみましょう:

<?php
//關(guān)閉了所有的錯(cuò)誤顯示
error_reporting(0);
//顯示所有錯(cuò)誤
//error_reporting(E_ALL);
//顯示所有錯(cuò)誤,但不顯示提示
//error_reporting(E_ALL & ~ E_NOTICE);
?>



學(xué)び続ける
||
<?php header("Content-type:text/html;charset=utf-8"); // 錯(cuò)誤處理函數(shù) function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 設(shè)置錯(cuò)誤處理函數(shù) set_error_handler("customError"); // 觸發(fā)錯(cuò)誤 echo($test); //關(guān)閉了所有的錯(cuò)誤顯示 error_reporting(0); //顯示所有錯(cuò)誤 //error_reporting(E_ALL); //顯示所有錯(cuò)誤,但不顯示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
提出するリセットコード
  • おすすめコース
  • コースウェアのダウンロード
現(xiàn)時(shí)點(diǎn)ではコースウェアはダウンロードできません?,F(xiàn)在スタッフが整理中です。今後もこのコースにもっと注目してください?