set_error_handler Variablen ausgeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • set_error_handler Variablen ausgeben

    Hi Leutz,

    wenn ich einen eigenen set_error_handler wie z.B. diesen verwende:
    PHP-Code:
    // user defined error handling function
    function userErrorHandler($errno$errmsg$filename$linenum$vars
    {

       
    // timestamp for the error entry
       
    $dt date("Y-m-d H:i:s (T)");

       
    // define an assoc array of error string
       // in reality the only entries we should
       // consider are E_WARNING, E_NOTICE, E_USER_ERROR,
       // E_USER_WARNING and E_USER_NOTICE
       
    $errortype = array (
                   
    E_ERROR          => "Error",
                   
    E_WARNING        => "Warning",
                   
    E_PARSE          => "Parsing Error",
                   
    E_NOTICE          => "Notice",
                   
    E_CORE_ERROR      => "Core Error",
                   
    E_CORE_WARNING    => "Core Warning",
                   
    E_COMPILE_ERROR  => "Compile Error",
                   
    E_COMPILE_WARNING => "Compile Warning",
                   
    E_USER_ERROR      => "User Error",
                   
    E_USER_WARNING    => "User Warning",
                   
    E_USER_NOTICE    => "User Notice",
                   
    E_STRICT          => "Runtime Notice"
                   
    );
       
    // set of errors for which a var trace will be saved
       
    $user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);

       
    $err "<errorentry>\n";
       
    $err .= "\t<datetime>" $dt "</datetime>\n";
       
    $err .= "\t<errornum>" $errno "</errornum>\n";
       
    $err .= "\t<errortype>" $errortype[$errno] . "</errortype>\n";
       
    $err .= "\t<errormsg>" $errmsg "</errormsg>\n";
       
    $err .= "\t<scriptname>" $filename "</scriptname>\n";
       
    $err .= "\t<scriptlinenum>" $linenum "</scriptlinenum>\n";
       
    //     var_dump($vars);
         
         
    if (in_array($errno$user_errors)) {
           
    $err .= "\t<vartrace>" wddx_serialize_value($vars"Variables") . "</vartrace>\n";             
       }
       
    $err .= "</errorentry>\n\n";
          
       
    // save to the error log, and e-mail me if there is a critical user error
       
    error_log($err3"error.log");
       if (
    $errno == E_USER_ERROR) {
           
    //mail("phpdev@example.com", "Critical User Error", $err);
       
    }

    Und per Trigger Error dann einen Fehler ausgebe:

    PHP-Code:
    function distance($vect1$vect2
    {

       if (!
    is_array($vect1) || !is_array($vect2)) {
            
    trigger_error("Falsche Parameters, arrays expected"E_USER_ERROR);
           return 
    NULL;
       }

       return 
    sqrt($d);
    }

    $c = array(1, -3);
    $b 1;
    // generate a user error
    $t1 distance($c$b); 
    Wird in einer Logdatei der Fehler abgelegt:


    <errorentry>
    <datetime>2006-04-04 16:53:20 (CEST)</datetime>
    <errornum>256</errornum>
    <errortype>User Error</errortype>
    <errormsg>Falsche Parameters, arrays expected</errormsg>
    <scriptname>C:\......\index.php</scriptname>
    <scriptlinenum>73</scriptlinenum>
    <vartrace><wddxPacket version='1.0'><header><comment>Variables</comment></header><data><struct><var name='vect1'><array length='2'><number>1</number><number>-3</number></array></var><var name='vect2'><null/></var></struct></data></wddxPacket></vartrace>
    </errorentry>


    Der Part zwischen den Tags <vartrace>*....*</vartrace>
    enthällt die Variablen, die bei der Fehlergenerierung bereits im Script vorhanden waren:

    <vartrace><wddxPacket version='1.0'><header><comment>Variables</comment></header><data><struct><var name='vect1'><array length='2'><number>1</number><number>-3</number></array></var><var name='vect2'><null/></var></struct></data></wddxPacket></vartrace>

    Jetzt finde ich diese Darstellung im XML-Format unübersichtlich und würde die Variablen lieber im Format wie ein var_dump() ausgegeben bekommen.
    Leider habe ich keinen Plan, wie ich das hinbekomme?
    Luxus Magazin
    Luxus Shops

  • #2
    Es würde mir auch schon langen, wenn es strukturiert mit Umbrüchen ausgegeben werden würde:
    PHP-Code:
      <wddxPacket version='1.0'>
        <
    header comment='Another example' />
        <
    data>
          <
    struct>
            <var 
    name='pi'>
              <
    number>3.1415926</number>
            </var>
            <var 
    name='cities'>
              <array 
    length='3'>
                <
    string>Austin</string>
                <
    string>Novato</string>
                <
    string>Seattle</string>
              </array>
            </var>
          </
    struct>
        </
    data>
      </
    wddxPacket
    Jemand eine Ahnung?
    Luxus Magazin
    Luxus Shops

    Kommentar


    • #3
      Mit <pre> vielleicht?
      Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
      var_dump(), print_r(), debug_backtrace und echo.
      Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
      Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
      Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

      Kommentar

      Lädt...
      X