-
/**
?*?給觀察者定義規(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);
????????}
????}
}
/**
?*?記錄錯誤日志
?*/
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?=?"時間:".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.=?"行號:".$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 手動觸發(fā)PHP錯誤,并自定義錯誤提示及錯誤級別。查看全部
-
開始查看全部
-
PHP配置文件中與錯誤相關(guān)選項
1.error_reporting 設(shè)置錯誤報告級別
2.display_errors 是否顯示錯誤
3.log_errors 設(shè)置是否將錯誤信息記錄到日志或者error_log中
4.error_log 設(shè)置腳本錯誤將記錄到的文件
5.log_errors_max_len 設(shè)置log_errors的最大字節(jié)數(shù)
6.ignore_repeated_errors 是否忽略重復(fù)的錯誤信息
7.ignore_repeated_source 是否忽略重復(fù)錯誤消息的來源
8.track_errors 如果開啟此選項,最后一個錯誤將永遠保存在$php_errormsg中
PHP中的錯誤級別
1.E_ERROR 致命的運行錯誤,將終止程序執(zhí)行
2.E_WARNING 運行時警告
3.E_PARSE 語法解析錯誤
4.E_NOTICE 通知注意,表示可能表現(xiàn)為錯誤的情況
5.E_CORE_ERROR 在PHP初始化啟動過程中發(fā)生的警告
6.E_CORE_WARNING PHP初始化啟動過程中發(fā)生的警告
7.E_COMPILE_ERROR 致命編譯錯誤
8.E_COMPILE_WARNGING 編譯時警告
9.E_USER_EORROR 用戶產(chǎn)生的錯誤信息,類似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 啟動PHP對代碼的修改建議,以確保代碼具有最佳的互操作性和向前的兼容性。
13.E_DEPRECATED 運行時通知,啟動后將會對在未來版本中可能無法正常工作的代碼給出警告。
14.E_USER_DEPRECATED 用戶產(chǎn)生的警告信息,類似E_DEPRECATED,但是是通過trigger_error()函數(shù)產(chǎn)生的
15.E_ALL 所有錯誤和警告信息
16.E_RECOVERABLE_ERROR 可被捕獲的指明錯誤,它表示發(fā)生了一個可能非常危險的錯誤,但是還沒有導(dǎo)致PHP引擎處于不穩(wěn)定的狀態(tài)。如果該錯誤沒有被用戶自定義句柄捕獲(參見set_error_handler()),將成為一個E_ERROR從而腳本會終止運行
查看全部 -
<?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>錯誤代碼:</b>[{$errno}] {$errmsg}<br />".PHP_EOL;
echo "<b>錯誤行號:</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ù)顯示錯誤信息:
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,時間:{$date},IP地址:{$_SERVER['REMOTE_ADDR']}。";
error_log($message);
?>
PHP錯誤類型
1、語法錯誤
2、環(huán)境錯誤
3、邏輯錯誤
Deprecated 最低級別錯誤,不推薦使用的函數(shù)等。
Notice 通知級別錯誤,未聲明的變量,或數(shù)組value等。
Warning 警告級別的錯誤,不存在的變量類型等。
Fatal 致命級別錯誤,不存在的函數(shù)等。
Parse 語法解析錯誤,缺少“;”等。
E_USER_相關(guān)的錯誤。
display_errors 是否顯示錯誤
error_reporting(E_ALL~E_NOTICE) 函數(shù)設(shè)置錯誤
error_reporting(0);不顯示所有錯誤,“-1”顯示所有錯誤。
ini_set('error_reporting',0); 設(shè)置為不顯示。
trigger_error()函數(shù)觸發(fā)錯誤,手動拋出錯誤。
trigger_error('錯誤提示',E_USER_ERROE);
error_log = "E:\www\error_log\test.log" 在.ini中設(shè)置,錯誤日志保存路徑
查看全部 -
Error_log函數(shù)有2個功能 1將消息寫入log文件error_log($message) 2發(fā)郵件
查看全部 -
PHP配置文件中的錯誤相關(guān)選項;
查看全部 -
Trigger_error用于拋出自定義錯誤 If(!numberic($num1)){ Trigger_error("必須是合法數(shù)字",E_USER_NOTICE)
查看全部 -
請輸入筆記內(nèi)容.error_reporting():專業(yè)php錯誤處理設(shè)置函數(shù)
error_reporting(0);不顯示所有錯誤,但是解析parse語法錯誤會顯示;
Error_reporting(E_ALL|~E_WARING)除了警告錯誤以外的錯誤級別都報告
顯示錯誤
ini_set(Option,value):可以配置php.ini里的選項,當然包括錯誤處理部分的選項了
設(shè)置錯誤級別..
ini_set('error_reporting',0)=>不顯示所有錯誤;
ini_set('error_reporting',-1)=>顯示所有錯誤;
php配置文件php.ini設(shè)置error_reporting;
通過error_reporting()函數(shù)設(shè)置
查看全部 -
display_errors指定程序運行時現(xiàn)不顯示錯誤
error_reporting指定錯誤級別
查看全部 -
PHP中所有的錯誤級別
查看全部 -
php配置文件中與錯誤相關(guān)選項
查看全部 -
php中年的錯誤級別(致命錯誤)
查看全部 -
php中的錯誤級別
查看全部 -
筆記:自定義異常處理器
查看全部 -
筆記:自定義異常類
查看全部
舉報