Pergunta

Estou usando print_r (debug_backtrace (), true) para recuperar uma representação de string do backtrace de depuração. Isso funciona bem, pois o print_r lida com a recursão.

Quando tentei itera recursivamente através da matriz de retorno deBug_backtrace () antes de transformá -la em uma corda, ela correu em recursão e nunca terminou.

Existe alguma maneira simples de remover certos pares de chave/valor sensíveis da matriz de backtrace? Talvez uma maneira de transformar a matriz para uma string usando print_r, em seguida, volte para uma matriz com os locais recursivos alterados para a string RECURSÃO, o que eu poderia iterar.

Não quero executar expressões regulares na representação da string, se possível.

Foi útil?

Solução

AHA ... descobriu que, se eu serializou a matriz Debug_backtrace e, em seguida, impecialmente a não emitir, a matriz resultante não terá as referências recursivas da matriz original e posso itera recursivamente com segurança.

$backtrace = debug_backtrace();
$backtrace = serialize($backtrace);
$backtrace = unserialize($backtrace);

recursive_sanitization_func($backtrace);

EDITAR: Ok, então esta não é uma solução completa. Funciona para referências de objetos recursivos (eles são perdidos), mas não para matrizes recursivas (elas são mantidas).

Minha solução atual é serializar/não-narizar como acima e, em seguida, executar a matriz resultante através de uma função de detecção de recursão, como a descrita aqui: http://www.php.net/manual/en/ref.array.php#96914

Eu gostaria que houvesse algo mais direto, mas isso está me levando por enquanto, a menos que alguém tenha uma solução melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top