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