2016-11-21 1 views
0

Ich möchte Debug_print_backtrace druckempfindliche Argumente nicht drucken. Meine naive Lösung funktioniert nicht.Wie kann ich Funktionsargumente von PHP ausblenden debug_print_backtrace

<?php 

function err() 
{ 
    debug_print_backtrace(); 
} 

function foo ($secret_arg, $arg) 
{ 
    $arg = $secret_arg; 
    $secret_arg = "<HIDDEN>"; 

    err(); 
} 

foo ("mysecret", 123); 
?> 

Diese gibt

#0 err() called at [/tmp/x.php:13] 
#1 foo(mysecret, 123) called at [/tmp/x.php:16] 

Auch wenn ich $secret_arg in der Funktion überschrieben, zeigt das Backtrace es "mysecret" noch enthält.

Aber ich DO immer noch wollen nicht geschützte Argumente in der Ablaufverfolgung angezeigt werden.

Gibt es nicht-hacky Möglichkeiten, dieses Argument von der Ablaufverfolgung zu verbergen? Vom Entwurf her möchte ich, dass die Funktionen lokal wissen, welche Argumente geschützt werden sollen, anstatt eine neue Backtrace-Funktion zu schreiben, die weiß, wo sich alle sensiblen Argumente befinden.

Antwort

0

Ab PHP 5.3.6 können Sie einfach tun:

debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); 

Von http://php.net/manual/en/function.debug-print-backtrace.php:

DEBUG_BACKTRACE_IGNORE_ARGS Unabhängig davon, ob die "args" Index wegzulassen, und damit die ganze Funktion/Methode Argumente, um Speicher zu sparen.

+0

Ich möchte die Argumente behalten, nur verstecken * einige * von ihnen. – spraff

+0

Gotcha, kein Problem; Siehe meine 2. Antwort. –

0

Sie haben es fast:

function err() 
{ 
    debug_print_backtrace(); 
} 

function foo(&$secret_arg, $arg) 
{ 
    $arg = $secret_arg; 
    $secret_arg = "<HIDDEN>"; 

    err(); 
} 

$secret = 'mysecret'; 

foo($secret, 123); 

Drucke:

#0 err() called at [/var/www/sites/portal.net2grid.com/test.php:32] 
#1 foo(<HIDDEN>, 123) called at [/var/www/sites/portal.net2grid.com/test.php:37] 
#2 require_once(/var/www/sites/portal.net2grid.com/test.php) called at [/var/www/sites/portal.net2grid.com/dispatch.php:73] 
#3 __portal_dispatch() called at [/var/www/sites/portal.net2grid.com/dispatch.php:6] 

Was ich tat, war ich dein $secret_arg Argument geändert, so dass es als Referenz übergeben wird.

+0

Das hat einen unangenehmen [Nebeneffekt] (http://pastebin.com/jAJXjJWx) :-( – spraff

Verwandte Themen