Rendi var_dump bello


132

Ho una semplice $_GET[]query var impostata per mostrare i dati di test quando si tirano giù le query dal DB.

<?php if($_GET['test']): ?>
  <div id="test" style="padding: 24px; background: #fff; text-align: center;">  
    <table>
      <tr style="font-weight: bold;"><td>MLS</td></tr>
      <tr><td><?php echo KEY; ?></td></tr>
      <tr style="font-weight: bold;"><td>QUERY</td></tr>
      <tr><td><?php echo $data_q; ?></td></tr>
      <tr style="font-weight: bold;"><td>DATA</td></tr>
      <tr><td><?php var_dump($data); ?></td></tr>
    </table>    
</div>
<?php endif; ?>

Quando lo faccio var_dump, come previsto, è questa grande stringa di array che è tutto sommerso. Esiste un modo per aggiungere almeno interruzioni di riga per questo o visualizzarlo var_dumpin un modo più leggibile? Sono aperto ai suggerimenti di jQuery su come manipolare la stringa dopo che è stata pubblicata.


48
Si. echo '<pre>'; var_dump($data); echo '</pre>'.
Amal Murali,

9
CHE COSA È QUESTA MAGIA ?!
Plummer,

che ne dici di usare var_masterpiece. chrome.google.com/webstore/detail/varmasterpiece/…
vijayrana,

Non penso che questo fosse nel webstore quando la domanda fu inizialmente posta. Vale la pena provare per chiunque lo guardi.
Plummer,

1
Penso che tu voglia solo print_r($data). php.net/manual/en/function.print-r.php
Drew Baker

Risposte:


369

Mi piace molto var_export(). Se ti piace il codice copia / incolla, prova:

echo '<pre>' . var_export($data, true) . '</pre>';

O anche qualcosa del genere per l'evidenziazione della sintassi del colore:

highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");

Puoi fare lo stesso con print_r(). Per var_dump()dovresti solo aggiungere i <pre>tag:

echo '<pre>';
var_dump($data);
echo '</pre>';

7
Nota che echo, var_exporte highlight_stringsono tutte funzioni php e devono essere all'interno di un <?php ?>blocco. Sì, anche se la riga della funzione highlight_string ha una coppia <? Php?> All'interno, è necessaria una coppia anche all'esterno.
BeowulfNode42

Una variante più breve di questo var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg

40

Prova l' estensione xdebug per php.

Esempio:

<?php var_dump($_SERVER); ?>

Uscite:

inserisci qui la descrizione dell'immagine


7
Intendiamoci, xdebug fa qualcosa di più della bella var_dump :)
Latheesan,

Lo vedevo così quando facevo var_dump, ma ora che ho wampserver 2.5 con php 5.5.12 lo vedo non formattato. Come mai ho potuto vedere come la tua foto prima, senza installare altro che Wampserver?
Limon,

1
Questo è decisamente molto sexy. Non sono sicuro del perché questa non sia contrassegnata come la soluzione corretta, ma potresti fornire maggiori dettagli sul processo di installazione. Su Windows, era giusto extension=php_xdebug.dll, nozend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime,

22

Usa un elemento HTML preformattato

echo '<pre>';
var_dump($data);
echo '</pre>';

10

Ho aggiunto un'aggiunta alle risposte di @AbraCadaver. Ho incluso uno script javascript che eliminerà il tag di inizio e chiusura di php. Avremo una discarica più bella e pulita.

Potrebbe anche essere qualcuno come questo.

function dd($data){
  highlight_string("<?php\n " . var_export($data, true) . "?>");
  echo '<script>document.getElementsByTagName("code")[0].getElementsByTagName("span")[1].remove() ;document.getElementsByTagName("code")[0].getElementsByTagName("span")[document.getElementsByTagName("code")[0].getElementsByTagName("span").length - 1].remove() ; </script>';
  die();
}

Risultato prima:

inserisci qui la descrizione dell'immagine

Risultato dopo:

inserisci qui la descrizione dell'immagine

Ora non abbiamo tag di inizio e chiusura di php


3

Se è "tutto confuso", puoi spesso provare il vecchio "codice sorgente" da provare. A volte i dump, i messaggi e le eccezioni sembrano essere solo una lunga stringa quando si scopre che le interruzioni di riga semplicemente non vengono visualizzate. Soprattutto alberi XML.

In alternativa, una volta ho creato un piccolo strumento chiamato InteractiveVarDump proprio per questo scopo. Ha certamente i suoi limiti ma a volte può anche essere molto conveniente. Anche se è stato progettato pensando a PHP 5.


1

Il modo migliore e più semplice per ottenere var_dump è usare xDebug (deve avere per qualsiasi sviluppatore php) Debian way install

In console: apt-get install php-xdebug dopo di ciò dovresti aprire php.ini (dipende dallo stack che usi) per è /etc/php/7.0/fpm/php.ini

Cercare display_errors

imposta lo stesso -> display_errors = On

Controlla html_errorsnello stesso file un po 'di seguito, deve anche essereOn

Salva ed esci

Dopo aperto /etc/php/7.0/fpm/conf.d/20-xdebug.ini

E aggiungi alla fine: `` `xdebug.cli_color = 1

`` Salva ed esci.

Molte altre opzioni e documentazione disponibili per xdebug sono disponibili qui.

https://xdebug.org/docs/

Buona fortuna e buon divertimento !!!

Risultato



1

Ecco la mia funzione per avere un var_dump piuttosto. In combinazione con Xdebug , aiuta molto ad avere una visione migliore di ciò che stiamo scaricando.

Ho migliorato un po 'la visualizzazione di Xdebug (dare un po' di spazio intorno, separatore tra valori, avvolgere variabili lunghe, ecc.).

Quando chiami la funzione, puoi impostare un titolo, uno sfondo, un colore del testo per distinguere tutto il tuo var_dump in una pagina.

O no ;)

/**
 * Pretty var_dump 
 * Possibility to set a title, a background-color and a text color
 */ 
function dump($data, $title="", $background="#EEEEEE", $color="#000000"){

    //=== Style  
    echo "  
    <style>
        /* Styling pre tag */
        pre {
            padding:10px 20px;
            white-space: pre-wrap;
            white-space: -moz-pre-wrap;
            white-space: -pre-wrap;
            white-space: -o-pre-wrap;
            word-wrap: break-word;
        }

        /* ===========================
        == To use with XDEBUG 
        =========================== */
        /* Source file */
        pre small:nth-child(1) {
            font-weight: bold;
            font-size: 14px;
            color: #CC0000;
        }
        pre small:nth-child(1)::after {
            content: '';
            position: relative;
            width: 100%;
            height: 20px;
            left: 0;
            display: block;
            clear: both;
        }

        /* Separator */
        pre i::after{
            content: '';
            position: relative;
            width: 100%;
            height: 15px;
            left: 0;
            display: block;
            clear: both;
            border-bottom: 1px solid grey;
        }  
    </style>
    ";

    //=== Content            
    echo "<pre style='background:$background; color:$color; padding:10px 20px; border:2px inset $color'>";
    echo    "<h2>$title</h2>";
            var_dump($data); 
    echo "</pre>";

}

1
function var_view($var)
{

    ini_set("highlight.keyword", "#a50000;  font-weight: bolder");
    ini_set("highlight.string", "#5825b6; font-weight: lighter; ");

    ob_start();
    highlight_string("<?php\n" . var_export($var, true) . "?>");
    $highlighted_output = ob_get_clean();

    $highlighted_output = str_replace( ["&lt;?php","?&gt;"] , '', $highlighted_output );

    echo $highlighted_output;
    die();
}

1

Non mi sembra di avere abbastanza rappresentante per chiudere questo come duplicato, ma è uno se qualcun altro può farlo. Ho pubblicato la stessa cosa su Una alternativa Var_dump più carina / istruttiva in PHP? ma per risparmiare tempo, lo copierò / incollerò anche qui:

Ho dovuto aggiungere un'altra risposta qui perché non volevo davvero seguire i passaggi delle altre soluzioni. È estremamente semplice e non richiede estensioni, include ecc. Ed è ciò che preferisco. È molto facile e molto veloce.

Prima basta json_encode la variabile in questione:

echo json_encode($theResult);

Copia il risultato che ottieni nell'editor JSON su http://jsoneditoronline.org/ semplicemente copialo nel riquadro di sinistra, fai clic su Copia> e stampa in modo carino il JSON in un formato ad albero davvero carino.

A ciascuno il suo, ma si spera che questo aiuti alcuni altri ad avere un'altra bella opzione! :)



-2

Ho scritto una funzione ( debug_display) che può stampare, matrici, oggetti e informazioni sui file in modo carino.

<?php
function debug_display($var,$show = false) {
    if($show) { $dis = 'block'; }else { $dis = 'none'; }
    ob_start();
    echo '<div style="display:'.$dis.';text-align:left; direction:ltr;"><b>Idea Debug Method : </b>
        <pre>';
    if(is_bool($var)) {
        echo $var === TRUE ? 'Boolean(TRUE)' : 'Boolean(FALSE)';
    }else {
        if(FALSE == empty($var) && $var !== NULL && $var != '0') {
            if(is_array($var)) {
                echo "Number of Indexes: " . count($var) . "\n";
                print_r($var);
            } elseif(is_object($var)) {
                print_r($var);
            } elseif(@is_file($var)){
                $stat = stat($var);
                $perm = substr(sprintf('%o',$stat['mode']), -4);
                $accesstime = gmdate('Y/m/d H:i:s', $stat['atime']);
                $modification = gmdate('Y/m/d H:i:s', $stat['mtime']);
                $change = gmdate('Y/m/d H:i:s', $stat['ctime']);
                echo "
    file path : $var
    file size : {$stat['size']} Byte
    device number : {$stat['dev']}
    permission : {$perm}
    last access time was : {$accesstime}
    last modified time was : {$modification}
    last change time was : {$change}
    ";
            }elseif(is_string($var)) {
                print_r(htmlentities(str_replace("\t", '  ', $var)));
            }  else {
                print_r($var);
            }
        }else {
            echo 'Undefined';
        }
    }
    echo '</pre>
    </div>';
    $output = ob_get_contents();
    ob_end_clean();
    echo $output;
    unset($output);
}

-12

Uso

echo nl2br(var_dump());

Questo dovrebbe funzionare ^^


9
var_dump non restituisce nulla, emette direttamente.
AbraCadaver
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.