كيف يمكنني إزالة البيانات الحساسة من وظيفة debug_backtrace؟
-
27-09-2019 - |
سؤال
أنا أستخدم print_r (debug_backtrace () ، صواب) لاسترداد تمثيل سلسلة لخلف التصحيح. هذا يعمل بشكل جيد ، حيث يعالج print_r العودية.
عندما حاولت التكرار بشكل متكرر من خلال صفيف الإرجاع debug_backtrace () قبل تحويله إلى سلسلة ، ركض إلى عودة ولم ينته أبدًا.
هل هناك طريقة بسيطة يمكنني إزالة بعض أزواج مفتاح/قيمة حساسة من صفيف الخلفية؟ ربما بطريقة ما لتحويل الصفيف إلى سلسلة باستخدام print_r ، ثم العودة إلى صفيف مع تم تغيير المواقع العودية إلى السلسلة العودية, ، والتي يمكنني التكرار من خلال.
لا أريد تنفيذ تعبيرات منتظمة على تمثيل السلسلة إن أمكن.
المحلول
اكتشف AHA ... أنه إذا قمت بتسلسل صفيف 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
أتمنى أن يكون هناك شيء أكثر وضوحًا ، لكن هذا يحصل علي الآن إلا إذا جاء شخص آخر بحل أفضل.