In order to allow the custom error and exception handling mechanism to capture fatal errors, the thinkphp () method adds Trigger_error ($e [' message ') to the fatalerror () approach;
// 重新设置错误及异常处理机制 set_error_handler(array('\Think\ErrorLog','phplog')); set_exception_handler(array('\Think\ErrorLog','phplog'));
// 致命错误捕获static public function fatalError() { Log::save(); if ($e = error_get_last()) { switch($e['type']){ case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: ob_end_clean(); // 抛出用户级别错误,让自定义的错误机制(phplog)能够捕获 trigger_error($e['message']); //自己添加的 self::halt($e); break; } }}
Here's your own error mechanism.
public static function Phplog ($errno, $errstr = null, $errfile = NULL, $errline = null) {if ($errstr = = = null) { Exception $backtrace = arr Ay (' logtype ' = ' exception ', ' environment ' = = Array ( ' Code ' = $errno->getcode (),//exception code ' Message ' = $errno->getmessage (),//exception Message ' file ' = $errno->getfile (), Exception file ' line ' = $errno->getline (), Exception line ' debugbacktrace ' = $errno->gettrace () anomaly tracking)); } else if (error_reporting ()) {//General error $backtrace = Array (' LogType ' = ' error ', ' environment ' = + AR Ray (' Code ' = $errno, ' message ' = $errstr, ' File ' = $errfile, ' line ' = ' $errline, ' debugbacktrace ' = = Debug_backtrace ()//Error backtracking) ); } else {//"@" error return; } $index = Iconv (' UTF-8 ', ' utf-8//ignore ', $index = & $backtrace [' Environment '] [' message ']); Remove invalid characters self::formatlog ($backtrace); Format Log $errorLevel = Array ( Output log information 0 = ' Exception ', Exception 1 = ' E_error ',//Fatal run-time error. The error cannot be recovered. Execution of the script was interrupted. 2 = ' e_warning ',//non-fatal run-time error. The execution of the script is not interrupted. 4 = ' e_parse ',//compile-time parsing error. Parsing errors should only be generated by the parser. 8 = ' e_notice ',//run-time prompt. May be an error, or it may occur when the script is running normally. "E_core_error",//errors generated internally by PHP. "E_core_warning",//warnings generated internally by PHP. "E_compile_error",//errors generated internally by the Zend scripting engine. "E_compile_warning",//warnings generated internally by the Zend scripting engine. The run-time error generated by the call to the Trigger_error () function is ' e_user_error '. "E_user_w"Arning ',//due to a run-time warning generated by calling the Trigger_error () function. 1024x768 = ' e_user_notice ',//run-time prompt generated by calling the Trigger_error () function. 2048 = ' e_strict ',//runtime prompt. Benefit from enhanced code interoperability and compatibility. 4096 = ' e_recoverable_error ',//fatal error that can be captured. 8192 = ' e_deprecated ',//runtime notification. When enabled, warns you about code that might not work correctly in a future release. 16384 = ' e_user_deprecated ',//user-produced less warning message. 30719 = ' E_all ',//all errors and warnings except E_strict. ); $temp = Htmlentities ($index, ent_quotes, ' UTF-8 '); Self::writelog ($backtrace, ' php ', ' {$errorLevel [$backtrace [' Environment '] [' Code ']}: \ "{$temp}
\ "in {$backtrace [' environment '] [' file ']} on line {$backtrace [' environment '] [' line ']}. Timestamp: {$_server[' request_time '} "); }protected static function Writelog (& $logData, $logType, $printStr) {self:: $lastError [' error '] = & $logData ; if (app_debug) {//debug mode Echo $printStr; Print log} $logPath = Runtime_path. ' Errorlog '. Date ('/y/m/d ', $_server[' request_time '). $logType; echo Realpath (Runtime_path); Result 1. D:\wamp\www\XMQZ\Runtime Results 2. D:\wamp\Apache24\Runtime Is_dir ($temp = dirname ($logPath)) | | mkdir ($temp, 0777, true); @file_put_contents ($logPath, Strtr (Serialize ($logData), array ("\ r \ n" = ". ($temp = chr (0)), "\ r" = $temp, "\ n" = $temp)). "\ n", File_append | Lock_ex ); }
Reply content:
In order to allow the custom error and exception handling mechanism to capture fatal errors, the thinkphp () method adds Trigger_error ($e [' message ') to the fatalerror () approach;
// 重新设置错误及异常处理机制 set_error_handler(array('\Think\ErrorLog','phplog')); set_exception_handler(array('\Think\ErrorLog','phplog'));
// 致命错误捕获static public function fatalError() { Log::save(); if ($e = error_get_last()) { switch($e['type']){ case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: ob_end_clean(); // 抛出用户级别错误,让自定义的错误机制(phplog)能够捕获 trigger_error($e['message']); //自己添加的 self::halt($e); break; } }}
Here's your own error mechanism.
public static function Phplog ($errno, $errstr = null, $errfile = NULL, $errline = null) {if ($errstr = = = null) { Exception $backtrace = arr Ay (' logtype ' = ' exception ', ' environment ' = = Array ( ' Code ' = $errno->getcode (),//exception code ' Message ' = $errno->getmessage (),//exception Message ' file ' = $errno->getfile (), Exception file ' line ' = $errno->getline (), Exception line ' debugbacktrace ' = $errno->gettrace () anomaly tracking)); } else if (error_reporting ()) {//General error $backtrace = Array (' LogType ' = ' error ', ' environment ' = + AR Ray (' Code ' = $errno, ' message ' = $errstr, ' File ' = $errfile, ' line ' = ' $errline, ' debugbacktrace ' = = Debug_backtrace ()//Error backtracking) ); } else {//"@" error return; } $index = Iconv (' UTF-8 ', ' utf-8//ignore ', $index = & $backtrace [' Environment '] [' message ']); Remove invalid characters self::formatlog ($backtrace); Format Log $errorLevel = Array ( Output log information 0 = ' Exception ', Exception 1 = ' E_error ',//Fatal run-time error. The error cannot be recovered. Execution of the script was interrupted. 2 = ' e_warning ',//non-fatal run-time error. The execution of the script is not interrupted. 4 = ' e_parse ',//compile-time parsing error. Parsing errors should only be generated by the parser. 8 = ' e_notice ',//run-time prompt. May be an error, or it may occur when the script is running normally. "E_core_error",//errors generated internally by PHP. "E_core_warning",//warnings generated internally by PHP. "E_compile_error",//errors generated internally by the Zend scripting engine. "E_compile_warning",//warnings generated internally by the Zend scripting engine. The run-time error generated by the call to the Trigger_error () function is ' e_user_error '. "E_user_w"Arning ',//due to a run-time warning generated by calling the Trigger_error () function. 1024x768 = ' e_user_notice ',//run-time prompt generated by calling the Trigger_error () function. 2048 = ' e_strict ',//runtime prompt. Benefit from enhanced code interoperability and compatibility. 4096 = ' e_recoverable_error ',//fatal error that can be captured. 8192 = ' e_deprecated ',//runtime notification. When enabled, warns you about code that might not work correctly in a future release. 16384 = ' e_user_deprecated ',//user-produced less warning message. 30719 = ' E_all ',//all errors and warnings except E_strict. ); $temp = Htmlentities ($index, ent_quotes, ' UTF-8 '); Self::writelog ($backtrace, ' php ', ' {$errorLevel [$backtrace [' Environment '] [' Code ']}: \ "{$temp}
\ "in {$backtrace [' environment '] [' file ']} on line {$backtrace [' environment '] [' line ']}. Timestamp: {$_server[' request_time '} "); }protected static function Writelog (& $logData, $logType, $printStr) {self:: $lastError [' error '] = & $logData ; if (app_debug) {//debug mode Echo $printStr; Print log} $logPath = Runtime_path. ' Errorlog '. Date ('/y/m/d ', $_server[' request_time '). $logType; echo Realpath (Runtime_path); Result 1. D:\wamp\www\XMQZ\Runtime Results 2. D:\wamp\Apache24\Runtime Is_dir ($temp = dirname ($logPath)) | | mkdir ($temp, 0777, true); @file_put_contents ($logPath, Strtr (Serialize ($logData), array ("\ r \ n" = ". ($temp = chr (0)), "\ r" = $temp, "\ n" = $temp)). "\ n", File_append | Lock_ex ); }