Сделайте var_dump красивым


132

У меня есть простой $_GET[]набор переменных запроса для отображения данных тестирования при извлечении запросов из БД.

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

Когда я это делаю var_dump, как и ожидалось, это большая строка массива, которая все смешивается. Есть ли способ добавить разрывы строк хотя бы для этого или отобразить их var_dumpболее читаемым способом? Я открыт для предложений jQuery по управлению строкой после ее публикации.


48
Да. echo '<pre>'; var_dump($data); echo '</pre>',
Амаль Мурали

9
ЧТО ЭТО МАГИЯ ?!
Plummer

как насчет использования var_masterpiece. chrome.google.com/webstore/detail/varmasterpiece/…
vijayrana,

Я не думаю, что это было в интернет-магазине, когда изначально задавали вопрос. Стоит попробовать для всех, кто в него заглянет.
Пламмер

1
Я думаю, ты просто хочешь print_r($data). php.net/manual/en/function.print-r.php
Дрю Бейкер

Ответы:


369

Я очень люблю var_export(). Если вам нравится код с возможностью копирования / вставки, попробуйте:

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

Или даже что-то вроде этого для цветовой подсветки синтаксиса:

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

Вы можете сделать то же самое с print_r(). Для var_dump()вас просто нужно будет добавить <pre>тег:

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

7
Обратите внимание, что echo, var_exportи highlight_stringявляются функциями php и должны находиться внутри <?php ?>блока. Да, даже несмотря на то, что в строке функции highlight_string есть пара <? Php?> Внутри, пара необходима и снаружи.
BeowulfNode42

Более короткий вариант этого var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg

40

Попробуйте расширение xdebug для php.

Пример:

<?php var_dump($_SERVER); ?>

Выходы:

введите описание изображения здесь


7
Имейте в виду, xdebug делает ВСЕ больше, чем просто симпатичный var_dump :)
Latheesan

Раньше я видел это при выполнении var_dump, но теперь, когда у меня есть wampserver 2.5 с php 5.5.12, я вижу его неформатированным. Как получилось, что я раньше мог видеть как твое фото, не установив ничего, кроме вампсервер?
Limon

1
Это определенно очень сексуально. Не уверен, почему это не отмечено как правильное решение, но вы можете предоставить более подробную информацию о процессе установки. На окнах это было просто extension=php_xdebug.dll, а неzend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime

22

Использовать предварительно отформатированный элемент HTML

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

10

Я сделал дополнение к ответам @AbraCadaver. Я включил скрипт javascript, который удалит начальный и закрывающий теги php. У нас будет чистая более красивая свалка.

Может быть, кто-то такой тоже.

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

Результат до:

введите описание изображения здесь

Результат после:

введите описание изображения здесь

Теперь у нас нет стартового и закрывающего тега php


3

Если это «все смешано», вы можете попробовать старый «просмотр исходного кода». Иногда дампы, сообщения и исключения кажутся одной длинной строкой, когда оказывается, что разрывы строк просто не отображаются. Особенно деревья XML.

Как вариант, однажды я создал небольшой инструмент под названием InteractiveVarDump именно для этой цели. Конечно, у него есть свои ограничения, но иногда он может быть очень удобным. Хотя он был разработан с учетом PHP 5.


1

Лучший и самый простой способ получить хороший var_dump - это использовать xDebug (обязательно для любого php dev) Установка Debian

В консоли: apt-get install php-xdebug после этого вы должны открыть php.ini (зависит от того, какой стек вы используете) для него /etc/php/7.0/fpm/php.ini

Ищи display_errors

установить то же самое -> display_errors = On

Отметьте этот html_errorsже файл чуть ниже, он также должен бытьOn

Сохранить и выйти

После открытия /etc/php/7.0/fpm/conf.d/20-xdebug.ini

И добавьте в конец: `` xdebug.cli_color = 1

`` Сохранить и выйти.

Здесь можно найти множество других доступных опций и документации для xdebug.

https://xdebug.org/docs/

Удачи и получайте удовольствие !!!

результат



1

Вот моя функция - иметь красивый var_dump. В сочетании с Xdebug это очень помогает лучше понять, что мы сбрасываем.

Я немного улучшил отображение Xdebug (оставил пространство вокруг, разделитель между значениями, перенос длинных переменных и т. Д.).

Когда вы вызываете функцию, вы можете установить заголовок, фон и цвет текста, чтобы различать все ваши var_dump на странице.

Или не ;)

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

Кажется, у меня недостаточно репутации, чтобы закрыть это как дубликат, но это один, если кто-то другой может это сделать. Я разместил то же самое на более красивой / информативной альтернативе Var_dump в PHP? но ради экономии времени я тоже скопирую / вставлю его сюда:

Мне пришлось добавить здесь еще один ответ, потому что я действительно не хотел повторять шаги в других решениях. Это очень просто и не требует расширений, включает и т. Д., И это то, что я предпочитаю. Это очень просто и очень быстро.

Сначала просто json_encode рассматриваемую переменную:

echo json_encode($theResult);

Скопируйте полученный результат в редактор JSON на http://jsoneditoronline.org/, просто скопируйте его в левую панель, нажмите «Копировать»>, и он распечатает JSON в действительно красивом древовидном формате.

Каждому свое, но, надеюсь, это поможет другим получить еще один хороший вариант! :)



-2

Я написал функцию ( debug_display), которая может красиво печатать массивы, объекты и информацию о файлах.

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

использование

echo nl2br(var_dump());

Это должно работать ^^


9
var_dump ничего не возвращает, он выводит напрямую.
AbraCadaver
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.