• 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:wamplogsphp_error.log:

    [19-May-2015 15:59:48 UTC] PHP Notice:  Undefined variable: test in D:practisephpErrorerror1.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:practisephpErrorerror1.php:0
    
    [19-May-2015 15:59:48 UTC] PHP Warning:  settype() [<a href='function.settype'>function.settype</a>]: Invalid type in D:practisephpErrorerror1.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:practisephpErrorerror1.php:0
    
    [19-May-2015 15:59:48 UTC] PHP   2. settype() D:practisephpErrorerror1.php:11
    
    [19-May-2015 15:59:48 UTC] PHP Fatal error:  Call to undefined function test() in D:practisephpErrorerror1.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:practisephpErrorerror1.php:0

    【例2】在 ini_set() 中设置保存错误日志的路径。

    <?php
    //关闭错误显示
    ini_set('display_errors', 0);
    //设置错误日志的路径
    ini_set('error_log', 'D:wamplogsphp_error_2.log');
    //显示所有错误
    error_reporting(-1);
    
    //记录错误
    //通知级别的错误
    echo $test; 
    //警告
    settype($var, 'dee');
    //致命错误
    test();

    页面不会有任何输出。打开 D:wamplogsphp_error_2.log:

    [19-May-2015 16:04:41 UTC] PHP Notice:  Undefined variable: test in D:practisephpErrorerror1.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:practisephpErrorerror1.php:0
    
    [19-May-2015 16:04:41 UTC] PHP Warning:  settype() [<a href='function.settype'>function.settype</a>]: Invalid type in D:practisephpErrorerror1.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:practisephpErrorerror1.php:0
    
    [19-May-2015 16:04:41 UTC] PHP   2. settype() D:practisephpErrorerror1.php:13
    
    [19-May-2015 16:04:41 UTC] PHP Fatal error:  Call to undefined function test() in D:practisephpErrorerror1.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:practisephpErrorerror1.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:wamplogslogin.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:wamplogslogin.log:

    [19-May-2015 16:25:59 UTC] 用户dee在2015-05-20 00:25:59以dee尝试登录系统,当前用户的ip地址为127.0.0.1

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

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

  • 相关阅读:
    TensorFlow设置GPU占用量
    与服务器同步工程(expect脚本)
    C/C++中#pragma once的使用
    sublime text 3 快捷键大全
    Sublime Text 3 注册码
    如何用diff比较两个文件夹下的内容
    Error in building opencv with ffmpeg
    opencv: Rotate image by 90, 180 or 270 degrees
    初识HTTPS
    Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
  • 原文地址:https://www.cnblogs.com/dee0912/p/4515954.html
Copyright © 2020-2023  润新知