Rendre var_dump jolie

132

J'ai une simple $_GET[]requête var définie pour afficher les données de test lors de l'extraction des requêtes de la base de données.

<?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; ?>

Quand je le fais var_dump, comme prévu, c'est cette grande chaîne de tableau qui est tout écrasée. Existe-t-il un moyen d'ajouter des sauts de ligne au moins pour cela ou d'afficher le var_dumpd'une manière plus lisible? Je suis ouvert aux suggestions jQuery sur la manipulation de la chaîne après sa publication.

Plummer
la source
48
Ouais. echo '<pre>'; var_dump($data); echo '</pre>'.
Amal Murali
9
QUELLE EST CETTE MAGIE?!
Plummer
que diriez-vous d'utiliser var_masterpiece. chrome.google.com/webstore/detail/varmasterpiece/…
vijayrana
Je ne pense pas que ce soit dans la boutique en ligne lorsque la question a été initialement posée. Vaut le détour pour tous ceux qui s'y intéressent.
Plummer
1
Je pense que tu veux juste print_r($data). php.net/manual/en/function.print-r.php
Drew Baker

Réponses:

369

J'aime vraiment var_export(). Si vous aimez copier / coller du code, essayez:

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

Ou même quelque chose comme ça pour la coloration syntaxique des couleurs:

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

Vous pouvez faire la même chose avec print_r(). Car il var_dump()vous suffirait d'ajouter les <pre>balises:

echo '<pre>';
var_dump($data);
echo '</pre>';
AbraCadaver
la source
7
Notez que echo, var_exportet highlight_stringsont toutes des fonctions php et doivent être à l'intérieur d'un <?php ?>bloc. Oui, même si la ligne de fonction highlight_string a une paire <? Php?> À l'intérieur, une paire est également nécessaire autour de l'extérieur.
BeowulfNode42
Une variante plus courte de ce var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg
40

Essayez l' extension xdebug pour php.

Exemple:

<?php var_dump($_SERVER); ?>

Les sorties:

entrez la description de l'image ici

Latheesan
la source
7
Remarquez, xdebug fait ALLOT plus que juste joli var_dump :)
Latheesan
J'avais l'habitude de voir comme ça quand je faisais var_dump, mais maintenant que j'ai wampserver 2.5 avec php 5.5.12, je le vois non formaté. Comment se fait-il que je puisse voir comme votre photo avant, sans rien installer de plus que wampserver?
Limon
1
C'est vraiment très sexy. Vous ne savez pas pourquoi ce n'est pas la bonne solution, mais vous pouvez donner plus de détails sur le processus d'installation. Sur Windows, c'était juste extension=php_xdebug.dll, paszend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime
22

Utiliser un élément HTML préformaté

echo '<pre>';
var_dump($data);
echo '</pre>';
Wael Assaf
la source
10

J'ai fait un ajout aux réponses @AbraCadaver. J'ai inclus un script javascript qui supprimera la balise de début et de fermeture de php. Nous aurons un dépotoir propre plus joli.

Peut-être quelqu'un comme ça aussi.

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();
}

Résultat avant:

entrez la description de l'image ici

Résultat après:

entrez la description de l'image ici

Maintenant, nous n'avons pas de balise de démarrage et de fermeture php

Muhammad Awais
la source
3

Si tout est "tout concassé", vous pouvez souvent essayer le "code source". Parfois, les vidages, les messages et les exceptions semblent n'être qu'une longue chaîne lorsqu'il s'avère que les sauts de ligne ne s'affichent tout simplement pas. Surtout les arbres XML.

Alternativement, j'ai déjà créé un petit outil appelé InteractiveVarDump à cette fin. Il a certes ses limites mais il peut aussi être très pratique parfois. Même s'il a été conçu avec PHP 5 à l'esprit.

WoodrowShigeru
la source
1

La meilleure façon et la plus simple d'obtenir un bon var_dump est d'utiliser xDebug (indispensable pour tout développement php) Debian way install

Dans la console: apt-get install php-xdebug après cela, vous devez ouvrir php.ini (dépend de la pile que vous utilisez) pour c'est /etc/php/7.0/fpm/php.ini

Rechercher display_errors

définir le même -> display_errors = On

Archivez le html_errorsmême fichier un peu ci-dessous, il doit également êtreOn

Sauvegarder et quitter

Après ouverture /etc/php/7.0/fpm/conf.d/20-xdebug.ini

Et ajoutez à la fin: `` `` xdebug.cli_color = 1

`` Enregistrez et quittez.

De nombreuses autres options et documentation disponibles pour xdebug peuvent être trouvées ici.

https://xdebug.org/docs/

Bonne chance et amusez-vous bien !!!

Résultat

Moris Finkel
la source
1

Voici ma fonction pour avoir un joli var_dump. Combiné avec Xdebug , cela aide beaucoup à avoir une meilleure vue de ce que nous déversons.

J'ai amélioré un peu l'affichage de Xdebug (donner un peu d'espace autour, séparateur entre les valeurs, envelopper de longues variables, etc.).

Lorsque vous appelez la fonction, vous pouvez définir un titre, un arrière-plan, une couleur de texte pour distinguer tous vos var_dump dans une page.

Ou pas ;)

/**
 * 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>";

}
Arno
la source
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();
}
Monsieur Hosseini
la source
1

Je ne semble pas avoir assez de représentants pour fermer cela comme un double, mais c'est un si quelqu'un d'autre peut le faire. J'ai posté la même chose sur Une alternative Var_dump plus jolie / informative en PHP?mais pour gagner du temps, je vais le copier / coller ici aussi:

J'ai dû ajouter une autre réponse ici car je ne voulais pas vraiment passer par les étapes des autres solutions. C'est extrêmement simple et ne nécessite aucune extension, inclut, etc. et c'est ce que je préfère. C'est très simple et très rapide.

Tout d'abord, json_encode la variable en question:

echo json_encode($theResult);

Copiez le résultat que vous obtenez dans l'éditeur JSON à http://jsoneditoronline.org/, copiez-le simplement dans le volet de gauche, cliquez sur Copier> et il imprime assez le JSON dans un très joli format d'arbre.

À chacun le leur, mais j'espère que cela aidera certains autres à avoir une autre option intéressante! :)

zpert
la source
-2

J'ai écrit une fonction ( debug_display) qui peut imprimer, des tableaux, des objets et des informations sur les fichiers de manière jolie.

<?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);
}
Ehsan Aghaei
la source
-12

Utilisation

echo nl2br(var_dump());

Cela devrait fonctionner ^^

Christine
la source
9
var_dump ne renvoie rien, il sort directement.
AbraCadaver