-
/**
?*?給觀察者定義規(guī)范
?*
?*?Interface?Exception_Observer
?*/
interface?Exception_Observer
{
????public?function?update(Observable_Exception?$e);
}
/**
?*?定義觀察者
?*?Class?Observable_Exception
?*/
class?Observable_Exception?extends?Exception
{
????//保存觀察者信息
????public?static?$_observers?=?array();
????public?static?function?attach(Exception_Observer?$observer)
????{
????????self::$_observers[]?=?$observer;
????}
????public?function?__construct($message?=?"",?$code?=?0,?Throwable?$previous?=?null)
????{
????????parent::__construct($message,?$code,?$previous);
????????$this->notify();
????}
????public?function?notify()
????{
????????foreach?(self::$_observers?as?$observer)?{
????????????$observer->update($this);
????????}
????}
}
/**
?*?記錄錯(cuò)誤日志
?*/
class?Logging_Exception_Observer?implements?Exception_Observer
{
????protected?$_filename?=?__DIR__.'/error_observer.log';
????public?function?__construct($filename?=?null)
????{
????????if?($filename!==null?&&?is_string($filename)){
????????????$this->_filename?=?$filename;
????????}
????}
????public?function?update(Observable_Exception?$e)
????{
????????$message?=?"時(shí)間:".date('Y:m:d?H:i:s',time()).PHP_EOL;
????????$message.=?"信息:".$e->getMessage().PHP_EOL;
????????$message.=?"追蹤信息:".$e->getTraceAsString().PHP_EOL;
????????$message.=?"文件:".$e->getFile().PHP_EOL;
????????$message.=?"行號(hào):".$e->getLine().PHP_EOL;
????????error_log($message,3,$this->_filename);//寫到日志中
????}
}
/**
?*?測試
?*/
header('content-type:text/html;charset=utf-8');
require_once?'Exception_Observer.php';
require_once?'Logging_Exception_Observer.php';
require_once?'Observable_Exception.php';
Observable_Exception::attach(new?Logging_Exception_Observer());
class?MyException?extends?Observable_Exception{
????public?function?test1()
????{
????????echo?'this?is?a?test';
????}
}
try{
????throw?new?MyException('出現(xiàn)了異常!');
}catch?(MyException?$exception){
????echo?$exception->getMessage();
}查看全部 -
Trigger_error 手動(dòng)觸發(fā)PHP錯(cuò)誤,并自定義錯(cuò)誤提示及錯(cuò)誤級(jí)別。查看全部
-
開始查看全部
-
PHP配置文件中與錯(cuò)誤相關(guān)選項(xiàng)
1.error_reporting 設(shè)置錯(cuò)誤報(bào)告級(jí)別
2.display_errors 是否顯示錯(cuò)誤
3.log_errors 設(shè)置是否將錯(cuò)誤信息記錄到日志或者error_log中
4.error_log 設(shè)置腳本錯(cuò)誤將記錄到的文件
5.log_errors_max_len 設(shè)置log_errors的最大字節(jié)數(shù)
6.ignore_repeated_errors 是否忽略重復(fù)的錯(cuò)誤信息
7.ignore_repeated_source 是否忽略重復(fù)錯(cuò)誤消息的來源
8.track_errors 如果開啟此選項(xiàng),最后一個(gè)錯(cuò)誤將永遠(yuǎn)保存在$php_errormsg中
PHP中的錯(cuò)誤級(jí)別
1.E_ERROR 致命的運(yùn)行錯(cuò)誤,將終止程序執(zhí)行
2.E_WARNING 運(yùn)行時(shí)警告
3.E_PARSE 語法解析錯(cuò)誤
4.E_NOTICE 通知注意,表示可能表現(xiàn)為錯(cuò)誤的情況
5.E_CORE_ERROR 在PHP初始化啟動(dòng)過程中發(fā)生的警告
6.E_CORE_WARNING PHP初始化啟動(dòng)過程中發(fā)生的警告
7.E_COMPILE_ERROR 致命編譯錯(cuò)誤
8.E_COMPILE_WARNGING 編譯時(shí)警告
9.E_USER_EORROR 用戶產(chǎn)生的錯(cuò)誤信息,類似E_ERROR,但是是由用戶自己在代碼中使用trigger_error()函數(shù)產(chǎn)生的。
10.U_USER_WARNING 用戶產(chǎn)生的警告信息,類似E_WARNING,但是是由用戶自己在代碼中使用trigger_error()函數(shù)產(chǎn)生的
11.E_USER_NOTICE 用戶產(chǎn)生的通知信息,類似E_NOTICE,但是是由用戶自己在代碼中使用trigger_error()函數(shù)產(chǎn)生的
12.E_STRICT 啟動(dòng)PHP對(duì)代碼的修改建議,以確保代碼具有最佳的互操作性和向前的兼容性。
13.E_DEPRECATED 運(yùn)行時(shí)通知,啟動(dòng)后將會(huì)對(duì)在未來版本中可能無法正常工作的代碼給出警告。
14.E_USER_DEPRECATED 用戶產(chǎn)生的警告信息,類似E_DEPRECATED,但是是通過trigger_error()函數(shù)產(chǎn)生的
15.E_ALL 所有錯(cuò)誤和警告信息
16.E_RECOVERABLE_ERROR 可被捕獲的指明錯(cuò)誤,它表示發(fā)生了一個(gè)可能非常危險(xiǎn)的錯(cuò)誤,但是還沒有導(dǎo)致PHP引擎處于不穩(wěn)定的狀態(tài)。如果該錯(cuò)誤沒有被用戶自定義句柄捕獲(參見set_error_handler()),將成為一個(gè)E_ERROR從而腳本會(huì)終止運(yùn)行
查看全部 -
<?php
class shutdown{
public function endScript(){
if(error_get_last()){
echo '<pre>';
print_r(error_get_last());
echo '</pre>';
}
file_put_contents('E:\www\error_log\test.txt','This is a test.');
die('end script');
}
}
//md6();
settype($arr, 'hello');
register_shutdown_function([new shutdown(),'endScript']);
?>
查看全部 -
<?php
error_reporting(-1);
set_error_handler(function($errno,$errmsg,$file,$line){
echo "<hr /><b>錯(cuò)誤代碼:</b>[{$errno}] {$errmsg}<br />".PHP_EOL;
echo "<b>錯(cuò)誤行號(hào):</b>{$file}文件中的第{$line}行<br />".PHP_EOL;
echo "<b>PHP版本:</b>".PHP_VERSION."(".PHP_OS.")".PHP_EOL;
});
echo $test;
settype($arr,'aaa');
//取消接管
restore_error_handler();
?>
通過回調(diào)函數(shù)顯示錯(cuò)誤信息:
set_error_handler();
set_exception_handler();
查看全部 -
<?php
ini_set('display_errors', 0);
error_reporting(-1);
ini_set('log_errors', 1);
ini_set('error_log','E:\www\error_log\test.log');
$date = date('Y-m-d H:i:s',time());
$message = "用戶名:username,密碼:123456,時(shí)間:{$date},IP地址:{$_SERVER['REMOTE_ADDR']}。";
error_log($message);
?>
PHP錯(cuò)誤類型
1、語法錯(cuò)誤
2、環(huán)境錯(cuò)誤
3、邏輯錯(cuò)誤
Deprecated 最低級(jí)別錯(cuò)誤,不推薦使用的函數(shù)等。
Notice 通知級(jí)別錯(cuò)誤,未聲明的變量,或數(shù)組value等。
Warning 警告級(jí)別的錯(cuò)誤,不存在的變量類型等。
Fatal 致命級(jí)別錯(cuò)誤,不存在的函數(shù)等。
Parse 語法解析錯(cuò)誤,缺少“;”等。
E_USER_相關(guān)的錯(cuò)誤。
display_errors 是否顯示錯(cuò)誤
error_reporting(E_ALL~E_NOTICE) 函數(shù)設(shè)置錯(cuò)誤
error_reporting(0);不顯示所有錯(cuò)誤,“-1”顯示所有錯(cuò)誤。
ini_set('error_reporting',0); 設(shè)置為不顯示。
trigger_error()函數(shù)觸發(fā)錯(cuò)誤,手動(dòng)拋出錯(cuò)誤。
trigger_error('錯(cuò)誤提示',E_USER_ERROE);
error_log = "E:\www\error_log\test.log" 在.ini中設(shè)置,錯(cuò)誤日志保存路徑
查看全部 -
Error_log函數(shù)有2個(gè)功能 1將消息寫入log文件error_log($message) 2發(fā)郵件
查看全部 -
PHP配置文件中的錯(cuò)誤相關(guān)選項(xiàng);
查看全部 -
Trigger_error用于拋出自定義錯(cuò)誤 If(!numberic($num1)){ Trigger_error("必須是合法數(shù)字",E_USER_NOTICE)
查看全部 -
請(qǐng)輸入筆記內(nèi)容.error_reporting():專業(yè)php錯(cuò)誤處理設(shè)置函數(shù)
error_reporting(0);不顯示所有錯(cuò)誤,但是解析parse語法錯(cuò)誤會(huì)顯示;
Error_reporting(E_ALL|~E_WARING)除了警告錯(cuò)誤以外的錯(cuò)誤級(jí)別都報(bào)告
顯示錯(cuò)誤
ini_set(Option,value):可以配置php.ini里的選項(xiàng),當(dāng)然包括錯(cuò)誤處理部分的選項(xiàng)了
設(shè)置錯(cuò)誤級(jí)別..
ini_set('error_reporting',0)=>不顯示所有錯(cuò)誤;
ini_set('error_reporting',-1)=>顯示所有錯(cuò)誤;
php配置文件php.ini設(shè)置error_reporting;
通過error_reporting()函數(shù)設(shè)置
查看全部 -
display_errors指定程序運(yùn)行時(shí)現(xiàn)不顯示錯(cuò)誤
error_reporting指定錯(cuò)誤級(jí)別
查看全部 -
PHP中所有的錯(cuò)誤級(jí)別
查看全部 -
php配置文件中與錯(cuò)誤相關(guān)選項(xiàng)
查看全部 -
php中年的錯(cuò)誤級(jí)別(致命錯(cuò)誤)
查看全部 -
php中的錯(cuò)誤級(jí)別
查看全部 -
筆記:自定義異常處理器
查看全部 -
筆記:自定義異常類
查看全部
舉報(bào)