如何从debug_backtrace函数中删除敏感数据?

时间:2010-04-16 15:33:44

标签: php debug-backtrace

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

当我尝试递归遍历debug_backtrace()返回数组,然后将其转换为字符串时,它会遇到递归并且永远不会结束。

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

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

1 个答案:

答案 0 :(得分: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

我希望有一些更直接的东西,但这是让我暂时离开,除非有人提出更好的解决方案。