【记录错误(生产环境)】

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)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中的更多相关文章

  1. PHP 错误与异常 笔记与总结(10)错误处理器测试

    关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...

  2. PHP 错误与异常 笔记与总结(15 )使用观察者模式处理异常信息

    使异常处理变得更灵活.可观察,可以使用设计模式中的观察者模式. 文件 ① 定义观察者的接口 ExceptionObserver.php: <?php /* 给观察者定义的规范 */ interf ...

  3. PHP 错误与异常 笔记与总结(14 )记录和发送异常信息

    当发生异常时,把异常信息记录到日志文件中: <?php header('content-type:text/html; charset=utf-8'); class LogException e ...

  4. PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()

    通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处 ...

  5. PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别

    [PHP 配置文件中与错误相关的选项 ] 选项 描述 error_reporting 设置错误报告的级别 display_errors 是否显示错误 log_errors 设置是否将错误信息记录到日志 ...

  6. PHP 错误与异常 笔记与总结(12 )异常

    ① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...

  7. PHP 错误与异常 笔记与总结(18 )页面重定向实现

    在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...

  8. PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

    有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) <?php function exception_e ...

  9. PHP 错误与异常 笔记与总结(4)通过 trigger_error 触发 PHP 错误

    [错误抑制符@] 除了 php.ini 中 error_reporting 和 display_errors 的设置.error_reporting() 函数.ini_set() 函数 外,还可以使用 ...

随机推荐

  1. Machine Schedule(poj 1274)

    题目大意:有n个奶牛和m个谷仓,现在每个奶牛有自己喜欢去的谷仓,并且它们只会去自己喜欢的谷仓吃东西,问最多有多少奶牛能够吃到东西 输入第一行给出n与m 接着n行 每行第一个数代表这个奶牛喜欢的谷仓的个 ...

  2. php 条件查询和多条件查询

    条件循环 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  3. hdu 1754 单点更新

    题意:很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师 ...

  4. 小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)

    各种区块的描述: 很多朋友喜欢听小甲鱼的PE详解,因为他们觉得课堂上老师讲解的都是略略带过,绕得大家云里雾里~刚好小甲鱼文采也没课堂上的教授讲的那么好,只能以比较通俗的话语来给大家描述~ 通常,区块中 ...

  5. 绑定GoDaddy域名到OpenShift应用

    一.申请GoDaddy域名 二.托管OpenShift应用 三.绑定www.mydomain.com 四.重定向mydomin.com到www.mydomain.com 五.It's go time ...

  6. 解决Fiddler无法抓到手机的会话包

    解决Fiddler无法抓到手机的会话包   使用Fiddler抓手机的会话包涉及多个方面,所以容易出现无法抓取包的情况.遇到这类问题,需要按照以下顺序进行检查和排除.   (1)在Fiddler中设置 ...

  7. BZOJ1085 [SCOI2005]骑士精神(IDA*)

    IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...

  8. LianLianKan[HDU4272]

    LianLianKan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. Guaranteeing message processing —— 可靠的消息处理

    Storm's reliability API: how Storm guarantees that every message coming off a spout will be fully pr ...

  10. clumsy 0.1 测试工具(延迟\掉包\节流\重发\乱序\篡改)

    clumsy : http://jagt.github.io/clumsy/可以模拟以下几种场景: 延迟(Lag),把数据包缓存一段时间后再发出,这样能够模拟网络延迟的状况. 掉包(Drop),随机丢 ...