目前的TP框架虽然有了错误日志,但不支持监控报警
目前的TP框架虽然有了错误日志,但不支持监控报警,以下是我的报警机制
找到文件
ThinkPHP\Library\Think\Exception.class.php
将class Exception extends \Exception {<br>
}
修改为class Exception extends \Exception {<br>
public function __destruct(){<br>
$xdebug_message = $this->message;<br>
$xdebug_code = $this->code;<br>
$xdebug_file = $this->file;<br>
$xdebug_line = $this->line;<br>
$xdebug_html = $this->__toString();<br>
<br>
$sms_content = $xdebug_message . ' in ' . $xdebug_file . ' on line ' . $xdebug_line . ' at ' . __SELF__;<br>
$email_content = nl2br($xdebug_html);<br>
<br>
$path = realpath(LOG_PATH).'/error_report/';<br>
if(!is_dir($path)) mkdir($path);<br>
if(!is_dir($path.'sms')) mkdir($path.'sms');<br>
if(!is_dir($path.'email')) mkdir($path.'email');<br>
$datetime = date('Y-m-d_H-i-s').'_'.rand(1000,9999).'.log';<br>
$sms_file = $path.'sms/'.$datetime;<br>
$email_file = $path.'email/'.$datetime;<br>
file_put_contents($sms_file,$sms_content);<br>
file_put_contents($email_file,$email_content);<br>
}<br>
}
找到文件
ThinkPHP\Library\Think\Think.class.php 第286行
将 if (APP_DEBUG || IS_CLI) {<br>
//调试模式下输出错误信息<br>
if (!is_array($error)) {<br>
$trace = debug_backtrace();<br>
$e['message'] = $error;<br>
$e['file'] = $trace[0]['file'];<br>
$e['line'] = $trace[0]['line'];<br>
ob_start();<br>
debug_print_backtrace();<br>
$e['trace'] = ob_get_clean();<br>
} else {<br>
$e = $error;<br>
}<br>
if(IS_CLI){<br>
exit(iconv('UTF-8','gbk',$e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);<br>
}<br>
} else {<br>
//否则定向到错误页面<br>
$error_page = C('ERROR_PAGE');<br>
if (!empty($error_page)) {<br>
redirect($error_page);<br>
} else {<br>
$message = is_array($error) ? $error['message'] : $error;<br>
$e['message'] = C('SHOW_ERROR_MSG')? $message : C('ERROR_MESSAGE');<br>
}<br>
}
修改为 //获取错误信息<br>
if (!is_array($error)) {<br>
$trace = debug_backtrace();<br>
$e['message'] = $error;<br>
$e['file'] = $trace[0]['file'];<br>
$e['line'] = $trace[0]['line'];<br>
ob_start();<br>
debug_print_backtrace();<br>
$e['trace'] = ob_get_clean();<br>
} else {<br>
$e = $error;<br>
}<br>
// 监测机制<br>
$xdebug_type = '';<br>
if(preg_match('/^'.L('_MODULE_NOT_EXIST_').'/',$e['message'])){<br>
$xdebug_type = 'MODULE_NOT_EXIST';<br>
}elseif(preg_match('/^'.L('_CONTROLLER_NOT_EXIST_').'/',$e['message'])){<br>
$xdebug_type = 'CONTROLLER_NOT_EXIST';<br>
}elseif(preg_match('/^'.L('_ERROR_ACTION_').'/',$e['message'])){<br>
$xdebug_type = 'ERROR_ACTION';<br>
}<br>
$allow = C('ERROR_LISTEN_LEVEL');<br>
if(empty($xdebug_type) || in_array($xdebug_type,explode(',',$allow))){<br>
$content = $e['message'] . ' in ' . $e['file'] . ' on line ' . $e['line'] . ' at ' . __SELF__;<br>
$econtent = $content.(isset($e['trace'])?'<br>'.$e['trace']:'');<br>
// 写入监测日志<br>
$path = realpath(LOG_PATH).'/error_report/';<br>
if(!is_dir($path)) mkdir($path);<br>
if(!is_dir($path.'sms')) mkdir($path.'sms');<br>
if(!is_dir($path.'email')) mkdir($path.'email');<br>
$datetime = date('Y-m-d_H-i-s').'_'.rand(1000,9999).'.log';<br>
$sms_file = $path.'sms/'.$datetime;<br>
$email_file = $path.'email/'.$datetime;<br>
C('ERROR_LISTEN_SMS') && file_put_contents($sms_file,$content);<br>
C('ERROR_LISTEN_EMAIL') && file_put_contents($email_file,$econtent);<br>
}<br>
<br>
if (APP_DEBUG || IS_CLI) {<br>
if(IS_CLI){<br>
exit(iconv('UTF-8','gbk',$e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);<br>
}<br>
} else {<br>
//否则定向到错误页面<br>
$error_page = C('ERROR_PAGE');<br>
if (!empty($error_page)) {<br>
redirect($error_page);<br>
} else {<br>
$message = is_array($error) ? $error['message'] : $error;<br>
$e['message'] = C('SHOW_ERROR_MSG')? $message : C('ERROR_MESSAGE');<br>
}<br>
}
这样,当有错误的时候,就会在设定好的目录里生成相应的报警文件,我们只要监控这两个目录,并将相关信息发送到监控人邮箱或手机即可
AD:真正免费,域名+虚机+企业邮箱=0元

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver CS6
视觉化网页开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具