分享一個(gè)php 的異常處理程序
更新時(shí)間:2014年06月22日 11:01:21 投稿:hebedich
給大家分享一個(gè)php的異常處理程序,功能很簡(jiǎn)單當(dāng)發(fā)生重大錯(cuò)誤時(shí),寫(xiě)日志并友好提示用戶,用處卻很大,對(duì)不對(duì)
直接上代碼
<?php
//exceptionHandle.php xiecongwen 20140620
//define('DEBUG',true);
/**
* Display all errors when APPLICATION_ENV is development.
*/
if (defined('DEBUG')) {
error_reporting(E_ALL);
ini_set("display_errors", 1);
}
if(!defined('DEBUG')){
/**
* 當(dāng)發(fā)生重大錯(cuò)誤時(shí) 寫(xiě)日志 并友好提示用戶
* (PS:只所以將代碼寫(xiě)在這里,是因?yàn)樵谄渌胤阶?cè)時(shí),出現(xiàn)問(wèn)題無(wú)法調(diào)用配置函數(shù).待完善...)
*/
function shutdownHandler()
{
/**
* 寫(xiě)日志 此處直接寫(xiě)在根目錄下shutdownlog.txt
*/
$lasterror = error_get_last();
if($lasterror){
$error = strval(date("Y-m-d h:i:s")).'=>'."[SHUTDOWN] lvl:" . $lasterror['type'] . " | msg:" . $lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" . $lasterror['line']."\n";
file_put_contents('./log/'.date("Ymd").'shutdownlog.txt',$error,FILE_APPEND);
//友好提示用戶
ob_end_clean();
die('對(duì)不起,我出錯(cuò)了!');
}
}
register_shutdown_function('shutdownHandler');
}
if(!defined('DEBUG')){
function errorHandler($errno, $errstr = '', $errfile = '', $errline = 0)
{
//寫(xiě)日志
$exception = new \ErrorException($errstr, 0, $errno, $errfile, $errline);
$msg = strval(date("Y-m-d h:i:s")).'=>'.'Type:'.getErrTypeName($errno).' '.getMsg($exception);
file_put_contents('./log/'.date("Ymd").'error.txt',$msg,FILE_APPEND);
switch ($errno)
{
case E_NOTICE:return ;
case E_DEPRECATED:return;
}
throw $exception;
}
function getErrTypeName($errno)
{
switch ($errno)
{
case E_NOTICE:return 'E_NOTICE' ;
case E_DEPRECATED:return 'E_DEPRECATED';
default:return $errno;
}
}
function exceptionHandler($ex)
{
$msg = strval(date("Y-m-d h:i:s")).'=>'.getMsg($ex);
file_put_contents('./log/'.date("Ymd").'exception.txt',$msg,FILE_APPEND);
}
function getMsg($exception)
{
//獲取最準(zhǔn)確的異常
while($exception->getPrevious())$exception = $exception->getPrevious();
$msg = ' Message: '.$exception->getMessage();
$msg .= ' File: '.$exception->getFile().':'.$exception->getLine()."\n";
return $msg;
}
set_error_handler('errorHandler',E_ALL);
set_exception_handler('exceptionHandler');
}
?>
您可能感興趣的文章:
- PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記 (四) - 異常處理類Exception
- 一個(gè)顯示效果非常不錯(cuò)的PHP錯(cuò)誤、異常處理類
- php異常處理使用示例
- PHP 的異常處理、錯(cuò)誤的拋出及回調(diào)函數(shù)等面向?qū)ο蟮腻e(cuò)誤處理方法
- php異常處理技術(shù),頂級(jí)異常處理器
- PHP的異常處理類Exception的使用及說(shuō)明
- php錯(cuò)誤、異常處理機(jī)制(補(bǔ)充)
- PHP中的錯(cuò)誤處理、異常處理機(jī)制分析
- PHP如何拋出異常處理錯(cuò)誤
- php 異常處理實(shí)現(xiàn)代碼
- php5編程中的異常處理詳細(xì)方法介紹
- php中異常處理方法小結(jié)
相關(guān)文章
PHP采集類snoopy詳細(xì)介紹(snoopy使用教程)
這篇文章主要介紹了PHP采集類snoopy詳細(xì)介紹,PHP采集類snoopy的詳細(xì)使用教程,需要的朋友可以參考下2014-06-06
Laravel中schedule調(diào)度的運(yùn)行機(jī)制
本文主要介紹了Laravel中schedule調(diào)度的運(yùn)行機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
CI框架AR操作(數(shù)組形式)實(shí)現(xiàn)插入多條sql數(shù)據(jù)的方法
這篇文章主要介紹了CI框架AR操作實(shí)現(xiàn)插入多條sql數(shù)據(jù)的方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了CI框架使用數(shù)組實(shí)現(xiàn)多條數(shù)據(jù)插入的方法,需要的朋友可以參考下2016-05-05
判斷、添加和刪除WordPress置頂文章的相關(guān)PHP函數(shù)小結(jié)
這篇文章主要介紹了判斷、添加和刪除WordPress置頂文章的相關(guān)PHP函數(shù)小結(jié),需要的朋友可以參考下2015-12-12
centos 7系統(tǒng)下安裝laravel運(yùn)行環(huán)境的步驟詳解
Laravel框架對(duì)于開(kāi)發(fā)網(wǎng)頁(yè)應(yīng)用來(lái)說(shuō)是一個(gè)絕好的的工具,最近正好又在學(xué)習(xí)linux系統(tǒng),所以下面這篇文章主要給大家介紹了在centos 7系統(tǒng)下安裝laravel運(yùn)行環(huán)境的步驟,需要的朋友可以參考借鑒,下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
ECSHOP在PHP5.5及高版本上報(bào)錯(cuò)的解決方法
程序不斷的更新?lián)Q代,php版本也在不斷的推陳出新,自從php7.0推出,php5.5版本已落伍,但是目前使用php5.5的也不少,接下來(lái),小編給大家整理關(guān)于ECSHOP在PHP5.5及高版本上報(bào)錯(cuò)的解決方法,小伙伴們一起來(lái)學(xué)習(xí)吧2015-08-08
PHP面向?qū)ο笾衝ew self()與 new static()的區(qū)別淺析
new static()是在PHP5.3版本中引入的新特性,無(wú)論是new static()還是new self(),都是new了一個(gè)新的對(duì)象。下面這篇文章主要給大家介紹了關(guān)于PHP面向?qū)ο笾衝ew self()與 new static()的區(qū)別,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08

