【问题标题】:How can I remove sensitive data from the debug_backtrace function?如何从 debug_backtrace 函数中删除敏感数据?
【发布时间】:2010-04-16 15:33:44
【问题描述】:

我正在使用 print_r(debug_backtrace(), true) 来检索调试回溯的字符串表示形式。这很好用,因为 print_r 处理递归。

当我尝试在将 debug_backtrace() 返回数组转换为字符串之前递归迭代它时,它遇到了递归并且永远不会结束。

是否有一些简单的方法可以从回溯数组中删除某些敏感的键/值对?也许有某种方法可以使用 print_r 将数组转换为字符串,然后返回到将递归位置更改为字符串 RECURSION 的数组,我可以对其进行迭代。

如果可能,我不想在字符串表示上执行正则表达式。

【问题讨论】:

    标签: php debug-backtrace


    【解决方案1】:

    啊哈...发现如果我序列化 debug_backtrace 数组然后立即反序列化它,生成的数组将缺少原始数组的递归引用,我可以安全地递归迭代它。

    $backtrace = debug_backtrace();
    $backtrace = serialize($backtrace);
    $backtrace = unserialize($backtrace);
    
    recursive_sanitization_func($backtrace);
    

    编辑:好的,所以这不是一个完整的解决方案。它适用于递归对象引用(它们丢失),但不适用于递归数组(它们被保留)。

    我目前的解决方案是如上所述进行序列化/反序列化,然后通过递归检测函数运行生成的数组,如下所述:http://www.php.net/manual/en/ref.array.php#96914

    我希望有更简单的方法,但除非其他人想出更好的解决方案,否则这让我暂时无法接受。

    【讨论】:

    • 有趣。 +1 一个有趣的解决方案。我对您的问题思考了几分钟,但没有提出任何有用的建议。
    • 我仍在试图弄清楚为什么这样做,因为 PHP 手册建议应该保留递归引用:php.net/manual/en/function.serialize.php“你甚至可以序列化()包含对自身的引用的数组。您正在序列化的数组/对象内的循环引用也将被存储。任何其他引用都将丢失。"
    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2015-09-11
    • 2011-08-22
    • 2020-05-08
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多