show_var e log_var

Discussione in 'Snippet PHP' iniziata da marino51, 18 Dicembre 2017.

  1. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.396
    Mi Piace Ricevuti:
    119
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    lo script che pubblico, ha lo scopo di verificare e mettere a punto ma anche di documentare i contenuti di array e o oggetti

    lo script si compone di 2 funzioni, "show_var" e "log_var", che accettano l'elemento da visualizzare e / o registrare nel log
    anche in questo caso, interessa il risultato che produce,
    non la bellezza del codice o delle sue presentazioni
    il risultato è la concretezza, l'estetica è solo una componente soggettiva

    può essere usato per qualsiasi tipo di array e/o oggetto per verificare o documentare i suoi contenuti,
    si, esistono "var_dump" e "print_r", ma quanta fatica in meno ....

    le funzioni si eseguono molto semplicemente, includendo lo script e richiamandole all'interno del proprio codice dove servono

    PHP:
    $pagina '{"success":{"msg_user":"","msg_id":"","users":[{"userid":"","card":"00000104","firstname":"Mario","lastname":"Rossi","email":"","birthday":"","phone":"","address":"","city":"","zip_code":"","country":"","privacy_profilazione":"0","privacy_mktg":"0","privacy_regolamento":"0","card_detail":{"status":{"attivazione":"","associazione":"associata"},"coupons_used":0,"coupons_available":0,"points_balance":{"points":0,"grand_total":0,"last_update":"2017-12-10 12:12:59"}},"store_frequency":"0","transactions":"","sesso":""}]}}';
    $data json_decode($pagina);

    require_once 
    'myUtils/show_vars.php';

    echo 
    "<h2>pagina</h2><br />".show_var($data);      // visualizzazione sullo schermo

    error_log(PHP_EOL."pagina => ".log_var($data), 0); // registrazione nel log

    // altri esempi
    echo "<h2>Lista di tutte le variabili definite</h2><br />".show_var(get_defined_vars());
    echo 
    "<h2>POST</h2><br />".show_var($_POST);
    nella "log_var" è stato inserito un limite per gli elementi che dovessero superare i 255 caratteri
    (per esempio, 730 precompilato invia e riceve file di lunghezza molto maggiore come elementi di array/oggetti)

    PHP:
    <?php
    function show_var($variable)
    {
        
    $tabella "<table border='1'>"
                 
    "<thead><tr><td><b>KEY</b></td><td><b>VALUE</b></td></tr></thead>"
                 
    "<tbody>";

        foreach (
    $variable as $key => $value)
        {
            if (
    $key !== "_SERVER")
            {
                if     (
    $value == "0")     $value 0;
                elseif (
    $value === true)   $value 'true';
                elseif (
    $value === false)  $value 'false';
                elseif (
    $value === null)   $value 'null';
                elseif ( empty(
    $value) )   $value 'empty';

                if ( 
    is_array($value) or is_object($value) )
                {
                    
    $tabella .= "<tr><td>".$key."</td><td>".show_var($value)."</td></tr>";
                }
                else
                {
                    
    $tabella .= "<tr><td>".$key."</td><td>".$value."</td></tr>";
                }
            }
        }
        
    $tabella .= "</tbody>";
        
    $tabella .= "</table>";
        return 
    $tabella;
    }

    ini_set('log_errors_max_len'8192);

    function 
    log_var($value$max_depth 99$key NULL$depth 0$refChain = array(), $tab NULL$text NULL)

        if(
    $depth 0)  $tab str_repeat("    "$depth);

        
    $text .= $tab . ($key !== NULL $key " => " "");

        if (
    is_array($value) || is_object($value))
        { 
            
    $recursion FALSE
            if (
    is_object($value))
            { 
                foreach (
    $refChain as $refVal)
                { 
                    if (
    $refVal === $value)
                    { 
                        
    $recursion TRUE
                        break; 
                    } 
                } 
                
    array_push($refChain$value); 
            } 
            
    $text .= (is_array($value) ? "array" "object") . "<br />".$tab."( ";

            if (
    $recursion)
            { 
                
    $text .= "*RECURSION* "
            } 
            elseif (isset(
    $max_depth) && $depth >= $max_depth)
            { 
                
    $text .= "*MAX DEPTH REACHED* "
            } 
            else
            { 
                if (!empty(
    $value))
                { 
                    
    $text .= "<br />"
                    foreach (
    $value as $child_key => $child_value)
                    { 
                        
    $text .= log_var($child_value$max_depth, (is_array($value) ? "[" "") . $child_key . (is_array($value) ? "]" ""), $depth+1$refChain) . ",<br />"
                    } 
                    
    $text .= "<br />" $tab
                } 
            } 
            
    $text .= ")";

            if (
    is_object($value))
            { 
                
    array_pop($refChain); 
            } 
        } 
        else
        { 
            if     (
    $value == "0")          $value 0;
            elseif (
    $value === true)        $value 'true';
            elseif (
    $value === false)       $value 'false';
            elseif (
    $value === null)        $value 'null';
            elseif ( empty(
    $value) )        $value 'empty';
            elseif ( 
    strlen($value) > 255 $value 'MAX-LEN';

            
    $text .= $value
        }
        
    $text str_replace("<br /><br />""<br />"$text);
        
    $text str_replace("<br />"PHP_EOL$text);

        return 
    $text

    ?>
    upload_2017-12-18_11-12-6.png

    upload_2017-12-18_11-13-29.png

    salute a tutti e buon Natale
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.396
    Mi Piace Ricevuti:
    119
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    ho dimenticato, se l'array da verificare fosse in javascript ?
    si può inviare (Ajax) l'array ad uno script php che richiama le funzioni del post precedente
    HTML:
        var chart = $('#container').highcharts (myChart); // myChart è l'array da controllare
    
            var myArray = JSON.stringify(myChart);
    
            alert(myArray);
    
                $.ajax
                ({
                    type:    'post',
                    cache:   false,
                    url:     'ShowJsArray.php',
                    data:
                    {
                        data : myArray,
                    },
                    success: function(response)
                    {
                        $('#myDiv').html(response);
                    },
                    error: function(request, status, error)
                    {
                        alert('errore esecuzione ShowJsArray.php '+request.responseText);
                    }
                });
    ShowJsArray.php
    PHP:
    <?php
    require_once 'myUtils/show_vars.php';

    $data json_decode($_POST['data']);

    error_log(PHP_EOL."myChart => ".log_var($data), 0);
    echo 
    "<h2>myChart</h2><br />".show_var($data);
    ?>
     
  3. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.396
    Mi Piace Ricevuti:
    119
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    stanco di leggere le fatture elettroniche nel formato xml per controllo,
    ho inserito una riga nella funzione show_var, ottenendo la visualizzazione uguale ad un'array
    riposto l'intero codice (poche righe) per chi la volesse utilizzare,
    PHP:
    function show_var($variable)
    {
        
    $tabella "<table border='1'>"
                 
    "<thead><tr><td><b>KEY</b></td><td><b>VALUE</b></td></tr></thead>"
                 
    "<tbody>";

        foreach (
    $variable as $key => $value)
        {
            if (
    $key !== "_SERVER")
            {
                if ( 
    is_object($value) and count($value) == $value = (string)$value;

                if     (
    $value == "0")     $value 0;
                elseif (
    $value === true)   $value 'true';
                elseif (
    $value === false)  $value 'false';
                elseif (
    $value === null)   $value 'null';
                elseif ( empty(
    $value) )   $value 'empty';

                if ( 
    is_array($value) or is_object($value) )
                {
                    
    $tabella .= "<tr><td>".$key."</td><td>".show_var($value)."</td></tr>";
                }
                else
                {
                    
    $tabella .= "<tr><td>".$key."</td><td>".$value."</td></tr>";
                }
            }
        }
        
    $tabella .= "</tbody>";
        
    $tabella .= "</table>";
        return 
    $tabella;
    }
    segue un esempio d'uso
    PHP:
    <?php
    require_once 'myUtils/show_vars.php';

    $xml simplexml_load_file('XmlParse.xml');

    echo 
    "<h3>XmlParse.xml</h3>".show_var$xml );
    ?>
    ed uno "spizzico" di risultato

    upload_2019-3-1_0-53-3.png
     

Condividi questa Pagina