PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
2023-09-11 14:17:03 时间
【记录错误(生产环境)】
php.ini:
① 开启 / 关闭 错误日志功能
log_errors = On
② 设置 log_errors 的最大字节数
log_errors_max_len = 1024
其他:
选项 | 描述 |
log_errors | 设置是否将错误信息记录到日志或者 error_log 中 |
error_log | 设置脚本错误将记录到的文件 |
log_errors_max_len | 设置 log_errors 的最大字节数 |
ignore_repeated_errors | 是否忽略重复的错误信息 |
ignore_repeated_source | 是否忽略重复错误消息的来源 |
track_errors | 如果开启此选项,最后一个错误将永久保存在$php_errormsg 中 |
【方法一】将错误记录到指定的文件中
① 开启 php.ini 中的 log_errors
② 指定 错误日志的保存路径,例如:
error_log = "d:/wamp/logs/php_error.log"
【例1】
<?php //关闭错误显示 ini_set('display_errors', 0); //显示所有错误 error_reporting(-1); //记录错误 //通知级别的错误 echo $test; //警告 settype($var, 'dee'); //致命错误 test();
页面不会有任何输出。打开 D:\wamp\logs\php_error.log:
[19-May-2015 15:59:48 UTC] PHP Notice: Undefined variable: test in D:\practise\php\Error\error1.php on line 9 [19-May-2015 15:59:48 UTC] PHP Stack trace: [19-May-2015 15:59:48 UTC] PHP 1. {main}() D:\practise\php\Error\error1.php:0 [19-May-2015 15:59:48 UTC] PHP Warning: settype() [<a href='function.settype'>function.settype</a>]: Invalid type in D:\practise\php\Error\error1.php on line 11 [19-May-2015 15:59:48 UTC] PHP Stack trace: [19-May-2015 15:59:48 UTC] PHP 1. {main}() D:\practise\php\Error\error1.php:0 [19-May-2015 15:59:48 UTC] PHP 2. settype() D:\practise\php\Error\error1.php:11 [19-May-2015 15:59:48 UTC] PHP Fatal error: Call to undefined function test() in D:\practise\php\Error\error1.php on line 13 [19-May-2015 15:59:48 UTC] PHP Stack trace: [19-May-2015 15:59:48 UTC] PHP 1. {main}() D:\practise\php\Error\error1.php:0
【例2】在 ini_set() 中设置保存错误日志的路径。
<?php //关闭错误显示 ini_set('display_errors', 0); //设置错误日志的路径 ini_set('error_log', 'D:\wamp\logs\php_error_2.log'); //显示所有错误 error_reporting(-1); //记录错误 //通知级别的错误 echo $test; //警告 settype($var, 'dee'); //致命错误 test();
页面不会有任何输出。打开 D:\wamp\logs\php_error_2.log:
[19-May-2015 16:04:41 UTC] PHP Notice: Undefined variable: test in D:\practise\php\Error\error1.php on line 11 [19-May-2015 16:04:41 UTC] PHP Stack trace: [19-May-2015 16:04:41 UTC] PHP 1. {main}() D:\practise\php\Error\error1.php:0 [19-May-2015 16:04:41 UTC] PHP Warning: settype() [<a href='function.settype'>function.settype</a>]: Invalid type in D:\practise\php\Error\error1.php on line 13 [19-May-2015 16:04:41 UTC] PHP Stack trace: [19-May-2015 16:04:41 UTC] PHP 1. {main}() D:\practise\php\Error\error1.php:0 [19-May-2015 16:04:41 UTC] PHP 2. settype() D:\practise\php\Error\error1.php:13 [19-May-2015 16:04:41 UTC] PHP Fatal error: Call to undefined function test() in D:\practise\php\Error\error1.php on line 15 [19-May-2015 16:04:41 UTC] PHP Stack trace: [19-May-2015 16:04:41 UTC] PHP 1. {main}() D:\practise\php\Error\error1.php:0
【例3】记录什么时候用户尝试以什么密码来登录系统的时间和 ip 地址(例如通过日志分析注水机器人)
login.html
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>登录</h1> <form action="doAction.php" method="post"> 用户名:<input type="text" name="username" /><br /> 密码:<input type="password" name="password" /><br /> <input type="submit" value="登录"> </form> </body> </html>
doAction.php:
<?php //不显示所有错误 ini_set('display_errors', 0); //错误等级:所有错误 error_reporting(-1); //开启错误日志功能 ini_set('log_errors', 'on'); //设置错误日志保存路径 ini_set('error_log', 'D:\wamp\logs\login.log'); //忽略重复的错误信息 ini_set('ignore_repeated_errors', 'on'); //忽略重复消息的来源 ini_set('ignore_repeated_source', 'on'); //设置时区 ini_set('date.timezone', 'PRC'); $username = $_POST['username']; $password = $_POST['password']; if($username == 'admin' && $password == 'admin'){ echo '登录陈功'; }else{ //记录什么时候管理员尝试以什么密码来登录系统的时间和ip地址 $date = date("Y-m-d H:i:s", time()); $ip = $_SERVER['REMOTE_ADDR']; $message = "用户{$username}在{$date}以{$password}尝试登录系统,当前用户的ip地址为{$ip}"; error_log($message); //跳转 header('location:login.html'); }
打开:D:\wamp\logs\login.log:
[19-May-2015 16:25:59 UTC] 用户dee在2015-05-20 00:25:59以dee尝试登录系统,当前用户的ip地址为127.0.0.1
【方法二】将错误记录到系统日志中
【方法三】将错误以邮件形式发送
相关文章
- Shell中的>/dev/null 2>&1 与 2>&1 >/dev/null 与&>/dev/null 的区别
- type 'simple Class' does not conform to protocol 'Example Protocol'错误
- Android-68-Tomcat各种启动错误的解决的方法,如:Exception in thread "Thread-6" NoClassDefFoundError,Document base E:
- Nginx学习笔记(四) 源码分析&socket/UDP/shmem
- HUAWEI USG6000系列 & NGFW Module V100R001 典型配置案例
- Docker架构&&虚拟化原理
- PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别
- 利用mysql对特殊字符和超长字符会进行截断的特性 进行存储型XSS攻击——WordPress <4.1.2 & <=4.2 存储型xss
- 高数 | 两个重要极限 & 经典错误 & 什么情况下求极限可以直接带入
- 配置ETH 2.0 同步节点 Nethermind & Prysm
- 高通与AT&T将测试4G网络无人机,将它飞得更远
- C&C++指针实训(国防科大)
- Android Studio 错误: 非法字符: 'ufeff' 解决方式|错误: 须要class, interface或enum
- [Servlet&JSP] HttpSession会话管理
- glm编译错误问题解决 formal parameter with __declspec(align('16')) won't be aligned
- CentOS出错You don't have permission to access on this server
- SQL TOP & LIKE
- 使用numpy出现DeprecationWarning: The normed argument is ignored when density is provided. 解决方法&忽略警告的方法