register_shutdown_function('debug_error',debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS));
//调试错误信息
if(!function_exists('debug_error'))
{
$GLOBALS['argv']=$argv;
$GLOBALS['argc']=$argc;
$GLOBALS['_server']=$_SERVER;
function debug_error($backtraceList=[])
{
$lastError=error_get_last();
if(!is_null($lastError))
{
$errorMessage=$backtrace = "";
$errorMessage.="【错误类型】:{$lastError['type']}。【错误信息】:{$lastError['message']}。【出错文件】:{$lastError['file']}。【文件行数】:{$lastError['line']}。";
if(is_array($backtraceList) && !empty($backtraceList))
{
foreach ($backtraceList as $v)
{
$backtrace .= "{$v['file']} - {$v['line']} - {$v['class']}::{$v['function']}()".'。';
}
}
$errorMessage.="【调用堆栈】:{$backtrace}";
//显示访问路径
$sapiName = php_sapi_name();
if($sapiName !== false)
{
if($sapiName != 'cli')
{
//http请求方式
if(!empty($GLOBALS['_server']) && isset($GLOBALS['_server']['HTTP_REFERER']) && isset($GLOBALS['_server']['HTTP_HOST']) && isset($GLOBALS['_server']['SCRIPT_URL']) && isset($GLOBALS['_server']['QUERY_STRING']))
{
$errorMessage.="【上级URL】:{$GLOBALS['_server']['HTTP_REFERER']}。【当前URL】:{$GLOBALS['_server']['HTTP_HOST']}{$GLOBALS['_server']['SCRIPT_URL']}?{$GLOBALS['_server']['QUERY_STRING']}。【script】:{$GLOBALS['_server']['SCRIPT_URL']}。";
}
}
else
{
// 后面的参数
$paramString="";
for ($i=2; $i<$GLOBALS['argc']; $i++)
{
$paramString.=" {$GLOBALS['argv'][$i]} ";
}
//$errorMessage .= "【CLI请求路由参数】{$paramString} ";
//cli请求方式
$errorMessage .= "【CLI请求】{$GLOBALS['argv'][0]} {$GLOBALS['argv'][1]} {$paramString}";
}
}
$errorMessage = str_replace(array("\r\n", "\r", "\n"," "), '', $errorMessage);
error_log("CUSTOM_ERROR".$errorMessage);
unset($errorMessage,$backtrace);
}
}
}