Lass var_dump hübsch aussehen

131

Ich habe einen einfachen $_GET[]Abfrage-Var-Satz zum Anzeigen von Testdaten beim Abrufen von Abfragen aus der Datenbank.

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

Wenn ich das tue var_dump, ist es wie erwartet diese große Array-Zeichenfolge, die alle zusammengewürfelt ist. Gibt es eine Möglichkeit, zumindest dafür Zeilenumbrüche hinzuzufügen oder diese var_dumpbesser lesbar anzuzeigen ? Ich bin offen für jQuery-Vorschläge zur Bearbeitung der Zeichenfolge nach dem Posten.

Stehlager
quelle
47
Ja. echo '<pre>'; var_dump($data); echo '</pre>'.
Amal Murali
9
WAS IST DIESE MAGIE?!
Plummer
Wie wäre es mit var_masterpiece. chrome.google.com/webstore/detail/varmasterpiece/…
Vijayrana
Ich glaube nicht, dass dies im Webstore war, als die Frage ursprünglich gestellt wurde. Ein Versuch wert für alle, die sich damit beschäftigen.
Plummer
1
Ich denke du willst nur print_r($data). php.net/manual/en/function.print-r.php
Drew Baker

Antworten:

367

Ich liebe es wirklich var_export(). Wenn Sie Code zum Kopieren / Einfügen mögen, versuchen Sie:

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

Oder sogar so etwas zur Hervorhebung der Farbsyntax:

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

Sie können das gleiche mit tun print_r(). Denn var_dump()Sie müssten nur die <pre>Tags hinzufügen :

echo '<pre>';
var_dump($data);
echo '</pre>';
AbraCadaver
quelle
7
Beachten Sie, dass echo, var_exportund highlight_stringsind alle PHP - Funktionen und Notwendigkeit in einem sein <?php ?>Block. Ja, obwohl die Funktionszeile "light_string "innen ein <? Php?> - Paar enthält, wird auch außen ein Paar benötigt.
BeowulfNode42
Eine kürzere Variante dieses var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg
40

Versuchen Sie xdebug Erweiterung für PHP.

Beispiel:

<?php var_dump($_SERVER); ?>

Ausgänge:

Geben Sie hier die Bildbeschreibung ein

Latheesan
quelle
7
Wohlgemerkt, xdebug macht ALLOT mehr als nur ziemlich var_dump :)
Latheesan
Früher habe ich das bei var_dump so gesehen, aber jetzt, wo ich wampserver 2.5 mit PHP 5.5.12 habe, sehe ich es unformatiert. Wie kommt es, dass ich Ihr Foto vorher sehen konnte, ohne mehr als wampserver zu installieren?
Limon
1
Das ist definitiv sehr sexy. Sie sind sich nicht sicher, warum dies nicht als die richtige Lösung markiert ist, aber Sie können weitere Details zum Installationsprozess angeben. Auf Fenstern war es einfach extension=php_xdebug.dllnichtzend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime
22

Verwenden Sie ein vorformatiertes HTML-Element

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

Ich habe @AbraCadaver-Antworten ergänzt. Ich habe ein Javascript-Skript eingefügt, das das Start- und Schließ-Tag von PHP löscht. Wir werden sauberere hübsche Müllkippe haben.

Kann auch jemand wie dieser sein.

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

Ergebnis vor:

Geben Sie hier die Bildbeschreibung ein

Ergebnis nach:

Geben Sie hier die Bildbeschreibung ein

Jetzt haben wir kein PHP-Start- und Schließ-Tag

Muhammad Awais
quelle
3

Wenn es "alles zusammengewürfelt" ist, können Sie oft den alten "Quellcode anzeigen" ausprobieren. Manchmal scheinen die Dumps, Nachrichten und Ausnahmen nur eine lange Zeichenfolge zu sein, wenn sich herausstellt, dass die Zeilenumbrüche einfach nicht angezeigt werden. Besonders XML-Bäume.

Alternativ habe ich einmal ein kleines Tool namens InteractiveVarDump für diesen Zweck erstellt. Es hat sicherlich seine Grenzen, aber es kann manchmal auch sehr praktisch sein. Obwohl es für PHP 5 entwickelt wurde.

WoodrowShigeru
quelle
1

Der beste und einfachste Weg, um einen schönen var_dump zu bekommen, ist die Verwendung von xDebug (muss für jeden PHP-Entwickler vorhanden sein)

In der Konsole: apt-get install php-xdebug Danach sollten Sie die php.ini (abhängig davon, welchen Stack Sie verwenden) für /etc/php/7.0/fpm/php.ini öffnen

Suchen nach display_errors

gleich setzen -> display_errors = On

Überprüfen Sie die html_errorsgleiche Datei ein wenig unten, es muss auch seinOn

Speichern und schließen

Nach dem Öffnen /etc/php/7.0/fpm/conf.d/20-xdebug.ini

Und fügen Sie am Ende hinzu: `` `xdebug.cli_color = 1

`` `Speichern und beenden.

Viele andere verfügbare Optionen und Dokumentationen für xdebug können hier gefunden werden.

https://xdebug.org/docs/

Viel Glück und hab Spaß !!!

Ergebnis

Moris Finkel
quelle
1

Hier ist meine Funktion, einen hübschen var_dump zu haben. Kombiniert mit Xdebug hilft es sehr, einen besseren Überblick über das zu bekommen, was wir ausgeben.

Ich habe die Anzeige von Xdebug etwas verbessert (geben Sie etwas Platz, Trennzeichen zwischen Werten, umbrechen Sie lange Variablen usw.).

Wenn Sie die Funktion aufrufen, können Sie einen Titel, einen Hintergrund und eine Textfarbe festlegen, um alle Ihre var_dump auf einer Seite zu unterscheiden.

Oder nicht ;)

/**
 * 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
quelle
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();
}
Herr Hosseini
quelle
1

Ich habe anscheinend nicht genug Repräsentanten, um dies als Duplikat zu schließen, aber es ist eines, wenn jemand anderes das kann. Ich habe dasselbe bei Eine hübschere / informativere Var_dump-Alternative in PHP gepostet.aber um Zeit zu sparen, werde ich es auch hier kopieren / einfügen:

Ich musste hier eine weitere Antwort hinzufügen, weil ich die Schritte in den anderen Lösungen nicht wirklich durchgehen wollte. Es ist extrem einfach und erfordert keine Erweiterungen, enthält usw. und ist das, was ich bevorzuge. Es ist sehr einfach und sehr schnell.

Zuerst einfach json_encode die fragliche Variable:

echo json_encode($theResult);

Kopieren Sie das Ergebnis, das Sie erhalten, in den JSON-Editor unter http://jsoneditoronline.org/. Kopieren Sie es einfach in den linken Bereich, klicken Sie auf Kopieren>, und der JSON wird in einem wirklich schönen Baumformat hübsch gedruckt.

Jedem sein eigenes, aber hoffentlich hilft dies einigen anderen, eine weitere nette Option zu haben! :) :)

zpert
quelle
-2

Ich habe eine Funktion ( debug_display) geschrieben, die auf hübsche Weise drucken, Arrays, Objekte und Dateiinformationen erstellen kann.

<?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
quelle
-12

Verwenden

echo nl2br(var_dump());

Das sollte funktionieren ^^

Christine
quelle
9
var_dump gibt nichts zurück, sondern gibt direkt aus.
AbraCadaver