Spraw, by var_dump wyglądał ładnie

142

Mam prosty $_GET[]zestaw zmiennych zapytań do wyświetlania danych testowych podczas ściągania zapytań z bazy danych.

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

Kiedy to robię var_dump, zgodnie z oczekiwaniami, jest to ten duży ciąg tablicowy, który jest zgnieciony. Czy istnieje sposób, aby przynajmniej w tym celu dodać podziały wierszy lub wyświetlić var_dumpbardziej czytelny sposób? Jestem otwarty na sugestie jQuery dotyczące manipulowania ciągiem znaków po jego opublikowaniu.

Plummer
źródło
51
Tak. echo '<pre>'; var_dump($data); echo '</pre>'.
Amal Murali
10
CZYM JEST TA MAGIA ?!
Plummer
co powiesz na użycie var_masterpiece. chrome.google.com/webstore/detail/varmasterpiece/…
vijayrana
Nie sądzę, żeby to było w sklepie internetowym, kiedy zadawano to pytanie. Warto spróbować dla każdego, kto się w to zagląda.
Plummer
1
Myślę, że po prostu chcesz print_r($data). php.net/manual/en/function.print-r.php
Drew Baker

Odpowiedzi:

389

Naprawdę kocham var_export(). Jeśli podoba Ci się kod, który można kopiować / wklejać, spróbuj:

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

Lub nawet coś takiego do podświetlania składni kolorów:

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

Możesz zrobić to samo z print_r(). Na var_dump()to po prostu trzeba dodać <pre>tagi:

echo '<pre>';
var_dump($data);
echo '</pre>';
AbraCadaver
źródło
7
Zauważ, że echo, var_exporti highlight_stringsą funkcjami php i muszą znajdować się wewnątrz <?php ?>bloku. Tak, mimo że linia funkcji highlight_string ma wewnątrz parę <? Php?>, Para jest potrzebna również na zewnątrz.
BeowulfNode42,
Krótsza odmiana tego var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg
Ładny! To jest bardzo pomocne :) Dzięki!
Jesse James Burton
40

Wypróbuj rozszerzenie xdebug dla php.

Przykład:

<?php var_dump($_SERVER); ?>

Wyjścia:

wprowadź opis obrazu tutaj

Tokarski
źródło
7
Pamiętaj, xdebug robi ALLOT więcej niż tylko ładny var_dump :)
Latheesan
Kiedyś widziałem to podczas wykonywania var_dump, ale teraz, gdy mam wampserver 2.5 z php 5.5.12, widzę, że jest niesformatowany. Jak to możliwe, że mogłem zobaczyć Twoje zdjęcie wcześniej, bez instalowania niczego poza wampserver?
Limon
1
To zdecydowanie bardzo seksowne. Nie jestem pewien, dlaczego nie jest to oznaczone jako prawidłowe rozwiązanie, ale możesz podać więcej szczegółów na temat procesu instalacji. W extension=php_xdebug.dllzend_extension=/some/really/long/specific/path/xdebug.so
systemie
23

Użyj wstępnie sformatowanego elementu HTML

echo '<pre>';
var_dump($data);
echo '</pre>';
Wael Assaf
źródło
11

Dodałem do odpowiedzi @AbraCadaver. Dołączyłem skrypt javascript, który usunie początkowy i zamykający tag php. Będziemy mieć czysty ładniejszy wysypisko.

Może to też być ktoś taki.

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

Wynik przed:

wprowadź opis obrazu tutaj

Wynik po:

wprowadź opis obrazu tutaj

Teraz nie mamy tagu początkowego i zamykającego php

Muhammad Awais
źródło
3

Jeśli jest to „wszystko zmiażdżone”, często możesz spróbować starego „widoku kodu źródłowego”. Czasami zrzuty, komunikaty i wyjątki wydają się być tylko jednym długim ciągiem, gdy okazuje się, że podziały wiersza po prostu się nie pokazują. Szczególnie drzewa XML.

Alternatywnie, stworzyłem kiedyś małe narzędzie o nazwie InteractiveVarDump właśnie w tym celu. Z pewnością ma swoje ograniczenia, ale czasami bywa bardzo wygodny. Mimo że został zaprojektowany z myślą o PHP 5.

WoodrowShigeru
źródło
2

Wydaje się, że nie mam wystarczającej liczby powtórzeń, aby zamknąć to jako duplikat, ale jest to jedno, jeśli ktoś inny może to zrobić. Opublikowałem to samo na Bardziej ładna / pouczająca alternatywa Var_dump w PHP? ale ze względu na oszczędność czasu również tutaj skopiuję / wkleję:

Musiałem tutaj dodać kolejną odpowiedź, ponieważ tak naprawdę nie chciałem przechodzić przez kroki w innych rozwiązaniach. Jest niezwykle prosty i nie wymaga żadnych rozszerzeń, zawiera itp. I jest tym, co wolę. Jest to bardzo łatwe i bardzo szybkie.

Najpierw po prostu json_encode odpowiednią zmienną:

echo json_encode($theResult);

Skopiuj otrzymany wynik do edytora JSON pod adresem http://jsoneditoronline.org/, po prostu skopiuj go do lewego panelu bocznego, kliknij Kopiuj> i ładnie drukuje JSON w naprawdę ładnym formacie drzewa.

Dla każdego z nich, ale miejmy nadzieję, że pomoże to niektórym innym mieć jeszcze jedną fajną opcję! :)

zpert
źródło
1

Najlepszym i najłatwiejszym sposobem na uzyskanie ładnego var_dump jest użycie xDebug (obowiązkowe dla każdego programisty php).

W konsoli: apt-get install php-xdebug po tym powinieneś otworzyć php.ini (w zależności od używanego stosu), aby uzyskać jego /etc/php/7.0/fpm/php.ini

Szukaj display_errors

ustaw to samo -> display_errors = On

Wpisz ten html_errorssam plik trochę poniżej, tak też musi byćOn

Zapisz i wyjdź

Po otwarciu /etc/php/7.0/fpm/conf.d/20-xdebug.ini

I na końcu dodaj: `` xdebug.cli_color = 1

`` Zapisz i wyjdź.

Wiele innych dostępnych opcji i dokumentacji dla xdebug można znaleźć tutaj.

https://xdebug.org/docs/

Powodzenia i miłej zabawy !!!

Wynik

Moris Finkel
źródło
1

Oto moja funkcja, aby mieć ładny var_dump. W połączeniu z Xdebug bardzo pomaga mieć lepszy wgląd w to, co wyrzucamy .

Poprawiłem nieco wyświetlanie Xdebug (zostaw trochę spacji, separator między wartościami, zawijaj długie zmienne itp.).

Kiedy wywołujesz tę funkcję, możesz ustawić tytuł, tło i kolor tekstu, aby odróżnić cały zrzut var_dump na stronie.

Albo nie ;)

/**
 * 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
źródło
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();
}
smarteist
źródło
1

Oto alternatywne, aktywnie utrzymywane oprogramowanie open source var_dumpdotyczące sterydów:

https://github.com/kint-php/kint

Działa przy zerowej konfiguracji i ma więcej funkcji niż var_dump Xdebuga.

Przykład, który omija limit rozmiaru porzuconych obiektów w locie z Kint:

     require 'kint.phar';
     +d( $variable ); // append `+` to the dump call

Oto zrzut ekranu:

kint

raveren
źródło
-2

Napisałem funkcję ( debug_display), która może w ładny sposób drukować tablice, obiekty i informacje o plikach.

<?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
źródło
-12

Posługiwać się

echo nl2br(var_dump());

To powinno działać ^^

Christine
źródło
9
var_dump nic nie zwraca, wyświetla bezpośrednio.
AbraCadaver