Как я могу удалить конфиденциальные данные из функции debug_backtrace?

StackOverflow https://stackoverflow.com/questions/2654223

  •  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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top