Как удалить конфиденциальные данные из функции debug_backtrace? - PullRequest
0 голосов
/ 16 апреля 2010

Я использую print_r (debug_backtrace (), true) для получения строкового представления обратной трассировки отладки. Это прекрасно работает, так как print_r обрабатывает рекурсию.

Когда я пытался рекурсивно пройтись по массиву возврата debug_backtrace (), перед тем как превратить его в строку, он натолкнулся на рекурсию и не закончился.

Есть ли какой-нибудь простой способ удалить некоторые чувствительные пары ключ / значение из массива обратной трассировки? Возможно, каким-то образом превратить массив в строку, используя print_r, а затем обратно в массив с рекурсивными местоположениями, измененными на строку RECURSION , которую я мог бы повторить.

Я не хочу выполнять регулярные выражения в строковом представлении, если это возможно.

1 Ответ

1 голос
/ 16 апреля 2010

Ага ... выяснилось, что если я сериализирую массив 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

Хотелось бы, чтобы было что-то более прямолинейное, но это меня пока удерживает, если кто-то другой не придумает лучшего решения.

...