PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项

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

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

【方法二】将错误记录到系统日志中

【方法三】将错误以邮件形式发送

时间: 2024-08-10 14:08:50

PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项的相关文章

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

通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处理—— 如果使用了该函数,程序会绕过标准的 PHP 错误处理. 摘自:php.net mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] ) 设置一个用户的函数(erro

PHP 错误与异常 笔记与总结(6)将错误日志保存在系统日志中

[将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 ini_set() 函数设置. [例1] <?php //关闭错误显示 ini_set('display_errors', 0); //开启错误日志功能 ini_set('log_errors', 'on'); //设置错误日志的路径 ini_set('error_log', 'syslog'); //显示所有错误 error_reporting(-1);

PHP 错误与异常 笔记与总结(9)自定义错误处理器

自定义错误处理器更加智能. <?php class myErrorHandler{ //$message:错误信息 //$filename:错误文件名 //$line:错误行号 //$vars:额外信息 public $message = ''; public $filename = ''; public $line = 0; public $vars = array(); protected $_noticeLog = 'D:\practise\php\From\notice\noticeLo

PHP 错误与异常 笔记与总结(7)将错误日志以邮件方式发送

当系统发生了很严重的问题,需要立刻发送给管理员.可以通过 error_log() 将错误以邮件形式发送到邮箱. 在 php.ini 中设置: sendmail_from = [email protected] 然后设置: sendmail_path = "G:\sendmail\sendmail.exe -t" 其中:G:\sendmail\sendmail.exe 是邮件客户端的地址. 代码: <?php //关闭错误显示 ini_set('display_errors', 0

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

关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorHandler.php'; error_reporting(-1); set_error_handler(array('myErrorHandler', 'deal')); //通知级别错误 echo $notice; 运行,在 D:\practise\php\From\notice 生成 noticeLo

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

[PHP 配置文件中与错误相关的选项 ] 选项 描述 error_reporting 设置错误报告的级别 display_errors 是否显示错误 log_errors 设置是否将错误信息记录到日志或者 error_log 中 error_log 设置脚本错误将记录到的文件 log_errors_max_len 设置 log_errors 的最大字节数 ignore_repeated_errors 是否忽略重复的错误信息 ignore_repeated_source 是否忽略重复错误消息的来源

bash配置文件中alias错误会引起shell异常

1. 先介绍下alias(别名)的用法 alias la='ls -a'  alias b='cd ..' 等等 alias 是个好东西,可以在用shell时省很多时间 2. 但有一天我发现执行shell脚本的时候,if 语句不能用了,会报以下错误: bash: build/envsetup.sh: line 30: syntax error near unexpected token `then' bash: build/envsetup.sh: line 30: `    if [ ! "$

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

有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) 1 <?php 2 function exception_error_handler($errno, $errstr, $errfile, $errline){ 3 throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 4 } 5 6 set_error_handler('exc

PHP 错误与异常 笔记与总结(1)错误(Deprecated,Notice,Warning)

[常见的错误类型] ① 语法错误 [例1]程序语句结尾少了';' <?php $username = "dee" //少了分号; echo $username; 输出: ( ! ) Parse error: syntax error, unexpected T_ECHO in D:\practise\php\Error\error1.php on line 3 Parse error:解析错误 syntax error:语法错误 [PHP 中的错误级别]16 种 常量描述 E_E

PHP 错误与异常 笔记与总结(2)错误(Fatal)

(接上) d.Fatal error 致命级别的错误 —— 程序终止执行 [例7]调用一个未定义的方法 <?php echo md6('dee'); echo 'continue'; 输出: ( ! ) Fatal error: Call to undefined function md6() in D:\practise\php\Error\error1.php on line 2 e. parse error 语法解析错误(也属于最高级别的错误,之前提到的错误都属于PHP 代码在运行期间产生