zoukankan      html  css  js  c++  java
  • debug_backtrace

    最近因为修复全站的sql注入漏洞,搞的焦头乱额。

    尽管日志中能够看到错误,但是因为日志中错误描述非常简单,经常是 sql query fail之类简单描述,既没有详细回溯,也没有sql具体语句。因为是线上代码,不可能一步步追溯,这时候debug_backtrace 就非常有用了。

    先来看下代码,怎么用的。

    public static function fatal($msg, $file = null, $line = null)
        {
            $path = '';
            $debug = debug_backtrace();
            if(is_array($debug)){
                $debug = array_slice($debug,1);
                $pathArr = array();
                foreach($debug as  $trace ){
                    $pathArr[] = $trace['class'].":".$trace['function'];
                }
                $path = implode(" <-- ",$pathArr);
            }
            $traceObj = self::getInstance();
            $traceObj->_trace($msg." path:".$path, self::$ERROR, $file, $line);
        }

    我只是使用了这个方法的文件追溯。

    官方文档:

    debug_backtrace — 产生一条回溯跟踪(backtrace)
    
    说明
    
    array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
    debug_backtrace() 产生一条 PHP 的回溯跟踪(backtrace)。
    
    参数
    
    options
    截至 5.3.6,这个参数是以下选项的位掩码:
    
    debug_backtrace() 选项
    DEBUG_BACKTRACE_PROVIDE_OBJECT    是否填充 "object" 的索引。
    DEBUG_BACKTRACE_IGNORE_ARGS    是否忽略 "args" 的索引,包括所有的 function/method 的参数,能够节省内存开销。 在 5.3.6 之前,仅仅能使用的值是 TRUE 或者 FALSE,分别等于是否设置 DEBUG_BACKTRACE_PROVIDE_OBJECT 选项。
    limit
    截至 5.4.0,这个参数能够用于限制返回堆栈帧的数量。 默认为 (limit=0) ,返回所有的堆栈帧。
    
    返回值
    
    返回一个包含众多关联数组的 array。 以为为有可能返回的元素:
    
    有可能从 debug_backtrace() 返回的元素
    名字    类型    说明
    function    string    当前的函数名,参见: __FUNCTION__。
    line    integer    当前的行号。参见: __LINE__file    string    当前的文件名。参见: __FILE__class    string    当前 class 的名称。参见 __CLASS__
    object    object    当前的 object。
    type    string    当前调用的类型。如果是一个方法,会返回 "->"。如果是一个静态方法,会返回 "::"。 如果是一个函数调用,则返回空。
    args    array    如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。

    大家可以自行尝试。

    这个一般用来调试用哦,不建议线上使用,我这是迫不得已,修复完漏洞,已经去除。

  • 相关阅读:
    区块链开发之Corda训练营笔记12:Flow习题答案
    区块链开发之Corda训练营笔记11:Flow代码演示
    gitolite的部署
    python操作redis
    python多进程
    mysql索引
    mysql事务
    mysql外键
    mysql联合查询
    python常用模块之re模块(正则)
  • 原文地址:https://www.cnblogs.com/gaoj87/p/4054912.html
Copyright © 2011-2022 走看看