PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
【记录错误(生产环境)】
php.ini:
① 开启 / 关闭 错误日志功能
log_errors = On
② 设置 log_errors 的最大字节数
log_errors_max_len =
其他:
| 选项 | 描述 |
| 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', );
//显示所有错误
error_reporting(-); //记录错误
//通知级别的错误
echo $test;
//警告
settype($var, 'dee');
//致命错误
test();
页面不会有任何输出。打开 D:\wamp\logs\php_error.log:
[-May- :: UTC] PHP Notice: Undefined variable: test in D:\practise\php\Error\error1.php on line
[-May- :: UTC] PHP Stack trace:
[-May- :: UTC] PHP . {main}() D:\practise\php\Error\error1.php:
[-May- :: UTC] PHP Warning: settype() [<a href='function.settype'>function.settype</a>]: Invalid type in D:\practise\php\Error\error1.php on line
[-May- :: UTC] PHP Stack trace:
[-May- :: UTC] PHP . {main}() D:\practise\php\Error\error1.php:
[-May- :: UTC] PHP . settype() D:\practise\php\Error\error1.php:
[-May- :: UTC] PHP Fatal error: Call to undefined function test() in D:\practise\php\Error\error1.php on line
[-May- :: UTC] PHP Stack trace:
[-May- :: UTC] PHP . {main}() D:\practise\php\Error\error1.php:
【例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
【方法二】将错误记录到系统日志中
【方法三】将错误以邮件形式发送
PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中的更多相关文章
- PHP 错误与异常 笔记与总结(10)错误处理器测试
关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...
- PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息
使异常处理变得更灵活.可观察,可以使用设计模式中的观察者模式. 文件 ① 定义观察者的接口 ExceptionObserver.php: <?php /* 给观察者定义的规范 */ interf ...
- PHP 错误与异常 笔记与总结(14 )记录和发送异常信息
当发生异常时,把异常信息记录到日志文件中: <?php header('content-type:text/html; charset=utf-8'); class LogException e ...
- PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()
通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处 ...
- PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别
[PHP 配置文件中与错误相关的选项 ] 选项 描述 error_reporting 设置错误报告的级别 display_errors 是否显示错误 log_errors 设置是否将错误信息记录到日志 ...
- PHP 错误与异常 笔记与总结(12 )异常
① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...
- PHP 错误与异常 笔记与总结(18 )页面重定向实现
在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...
- PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误
有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) <?php function exception_e ...
- PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误
[错误抑制符@] 除了 php.ini 中 error_reporting 和 display_errors 的设置.error_reporting() 函数.ini_set() 函数 外,还可以使用 ...
随机推荐
- Android之网络编程
本文主要包括三方面内容 Httpurlconnection中doGet与doPost方法实现提交数据到服务器 HttpClient中doGet与doPost方法实现提交数据到服务器 android-a ...
- linux shell的切换
查看系统可用shell种类:(一般是bash shell) ➜ ~ chsh -l /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/zsh 修改当前的sh ...
- C#(去、过滤)掉字符中的换行符
本文介绍的方法需要先导入命名空间:usingSystem.Text.RegularExpressions; 字符串里所有的的换行符都去掉:textStr = Regex.Replace(textStr ...
- Java Hour 40 Maven ( 2 )
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 40 Maven 坐标 任何一个包都需要一个全世界唯一的id, Ma ...
- Android 下载文件 显示进度条
加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...
- JAVA项目JDK版本修改
1.添加JDK window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties
- 深入理解DIP、IoC、DI以及IoC容器(转)
深入理解DIP.IoC.DI以及IoC容器 摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.D ...
- Ajax优缺点
1.页面无刷新,用户体验好: 2.异步通信,迅速的响应能力: 3.按需取数据,减少冗余需求,减少服务器负荷. 4.破坏浏览器后退按钮的正常行为. 5.Ajax的核心是JavaScript对象XmlHt ...
- 简单几何(直线与线段相交) POJ 1039 Pipe
题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...
- 拓扑排序 Codeforces Round #290 (Div. 2) C. Fox And Names
题目传送门 /* 给出n个字符串,求是否有一个“字典序”使得n个字符串是从小到大排序 拓扑排序 详细解释:http://www.2cto.com/kf/201502/374966.html */ #i ...