Как удалить конфиденциальные данные из функции debug_backtrace?
Я использую print_r(debug_backtrace(), true), чтобы получить строковое представление обратной трассировки отладки. Это прекрасно работает, так как print_r обрабатывает рекурсию.
Когда я пытался рекурсивно перебрать возвращаемый массив debug_backtrace (), прежде чем превратить его в строку, он натолкнулся на рекурсию и никогда не заканчивался.
Есть ли какой-нибудь простой способ удалить некоторые чувствительные пары ключ / значение из массива обратной трассировки? Возможно, какой-нибудь способ превратить массив в строку, используя print_r, затем вернуться к массиву с рекурсивными местоположениями, измененными на строку RECURSION, которую я мог бы перебрать.
Я не хочу выполнять регулярные выражения в строковом представлении, если это возможно.
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
Хотелось бы, чтобы было что-то более прямолинейное, но это меня пока не заставит, если кто-то другой не придумает лучшего решения.