例:
复制代码 代码如下:
$a = fopen('test.txt','r');
//这里并没有对文件进行判断就打开了,如果文件不存在就会报错
?>
复制代码 代码如下:
if(file_exists('test.txt')){
$f=fopen('test.txt','r');
//使用完后关闭
fclose($f);
}
?>
复制代码 代码如下:
if(!file_exists('aa.txt')){
die('文件不存在');
} else {
//执行操作
}
//如果上面die()被触发,那么这里echo接不被执行
echo 'ok';
复制代码 代码如下:
file_exits('aaa.txt') or die('文件不存在');
echo 'ok';
复制代码 代码如下:
function error_function($error_level,$error_message,$error_file,$error_line,$error_context)
//创建好后还需要改写set_error_handler();函数
set_error_handler('error_function',E_WARNING);//这里error_function对应上面创建的自定义处理器名,第二个参数为使用自定义错误处理器的错误级别;
这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:
值 | 常量 | 描述 |
---|---|---|
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 的一部分) |
コードをコピー コードは次のとおりです:
if($age>120){
echo 'Wrong age'; exit();
}
if($age>120){ //trigger_error('error message'[,'error level']);ここでのエラー レベルはオプションであり、使用されます。エラーのレベルを定義します
// ユーザー定義のレベルには、次の 3 つのタイプがあります: E_USER_WARNING、E_USER_ERROR、E_USER_NOTICEtrigger_error('age error');// これは、呼び出し側のデフォルトのエラー処理方法です。システムでは、カスタム プロセッサを使用することもできます。
}
//カスタム プロセッサ、上記と同じ
function myerror($error_level,$error_message){
echo 'error text';
//同時に、システムのデフォルトを変更する必要があります 処理関数
set_error_handler('myerror',E_USER_WARNING);//上記と同様、最初のパラメータはカスタム関数の名前であり、 2 番目はエラー レベルです [ここでのエラー レベルは通常、次の 3 つです: E_USER_WARNING、E_USER_ERROR、E_USER_NOTICE]
//trigger_error を使用してカスタム エラー処理関数を使用できるようになりました
練習問題:
date_default_timezone_set('PRC'); function myerror($error_level,$error_message){
$info= " エラー番号: $error_leveln";$info.= "エラー メッセージ: $error_messagen";発生時刻:'.date('Y-m-d H:i:s');
$filename='aa.txt';
if(!$fp=fopen($filename,'a')){
'ファイル '.$filename の作成に失敗しました。';
}
if(is_writeable($filename)){
if(!fwrite($fp,$info)){
echo 'ファイルの書き込みに失敗しました';
} else {
echo 'レコード成功のエラーメッセージ';
fclose($fp); else {
echo 'ファイル' .$filename.'書き込み不可';
}
exit() ;
set_error_handler('myerror',E_WARNING);
$fp=fopen('aaa.txt', 'r');
?>
C. エラー ログ
デフォルトでは、php.ini の error_log 設定に従って、php はサーバーのエラー記録システムにエラー レコードを送信します。またはファイル。エラー レコードは、error_log() 関数を使用してファイルまたはリモートの宛先に送信できます。
構文:
error_log(error[,type,destination,headers])
タイプ部分は通常 3 で、これは意味します。ファイルの後に来ます 元のコンテンツを上書きせずにエラー情報を追加します
destination は保存されたファイルまたはリモートの宛先を表します
例: error_log("$error_info",3,"errors.txt") );
2. PHP 例外処理 [重要なポイント]
} catch(Exception $e){ //例外処理の場合、メソッド: //1. 自分で処理します //2. 処理しないで、再度スローします }
2.
Try - use 例外関数は「try」ブロック内に配置する必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。
Throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります
キャッチ - 「キャッチ」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します
例外をトリガーしましょう:
コードをコピー
if($number>1){ throw new Exception("値は 1 以下である必要があります"); return } //in 例外は「try」コード ブロックでトリガーされます
try{checkNum(2)
//例外がスローされた場合、次のコード行は出力されません
echo 'これが表示された場合、番号は 1 以下です';
}catch(Exception $e){
//例外をキャッチ
echo 'Message: ' .$e->getMessage( );
}
?>
上記のコードは次のようなエラーを受け取ります:
メッセージ: 値は 1 以下である必要があります
説明例:
上記のコードは例外をスローし、それをキャッチします:
Create checkNum( ) 関数。数値が 1 より大きいかどうかを検出します。その場合は、例外をスローします。
「try」コード ブロックで checkNum() 関数を呼び出します。
checkNum() 関数で例外がスローされました
「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。
この例外オブジェクトから $e->getMessage() を呼び出すと、例外からのエラー メッセージが出力されます
ただし、「各スローはキャッチに対応する必要がある」という原則に従うために、次のようにすることができます。見逃したエラーを処理するためにトップレベルの例外プロセッサを設定します。
set_Exception_handler() 関数は、キャッチされなかった例外をすべて処理するユーザー定義関数を設定できます。
コードをコピー コードは次のとおりです:
//最上位の例外ハンドラを設定します
function myException($e){
echo 'this is TopException';
} //デフォルトの例外ハンドラを変更します
set_Exception_handler(" myException") ;
try{
$i=5;
if($i 新しい例外をスローします('$i は 10 より大きくなければなりません');
}
} catch(Exception $e){
// 例外を処理します
Echo $e->getMessage().'
'
// 例外を処理せずに続行しますto throw
Throw newException('errorinfo'); // throw $e を使用して元のエラー メッセージを保持することもできます。
コードをコピーします コードは次のとおりです:
classcustomException extends Exception{
Public function errorMessage(){
// エラー メッセージ $errorMsg = ' '.$this->getFile().' の '.$this->getLine().' 行でエラーが発生しました: '.$this->getMessage( ).' は有効な電子メール アドレスではありません'; return $errorMsg; }
}
//Use
try{
'error message');
} catch(customException $e){
echo $e->errorMsg();
}
エラー メッセージを返すために複数の catch を使用できます。さまざまな状況で
コードをコピー コードは次のとおりです。
try{ $i=5; > if($i>0){
Throw newcustomException('error message');//カスタム例外クラス処理を使用します
} if($i<-10){
throw newException(' error2');//システムのデフォルトの例外処理を使用します
}
}catch(customException $e){
echo $e->getMessage()
}catch(Exception $e1){
echo $e1-> getMessage();
}
例外ルール
例外処理を必要とするコードは、潜在的な例外をキャッチするために try コード ブロックに配置する必要があります。 各 try ブロックまたは throw ブロックには、対応する catch ブロックが少なくとも 1 つ必要です。 複数の catch ブロックを使用して、さまざまな種類の例外をキャッチします。 例外は、try コード内の catch ブロックで再スローできます。 つまり、例外がスローされた場合は、それをキャッチする必要があります。