Зробіть 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
ЩО ЦЕ МАГІЧНА ?!
Плюмер

як щодо використання 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 ?>блоку. Так, хоча функціональна лінія підсвічування має пару <? 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, я бачу це неформатним. Як я могла раніше бачити вашу фотографію, не встановлюючи нічого більше, ніж wampserver?
Лімон

1
Це, безумовно, дуже сексуально. Не впевнений, чому це не позначено як правильне рішення, але ви можете дати більше деталей щодо процесу встановлення. На вікнах це було просто extension=php_xdebug.dll, ніzend_extension=/some/really/long/specific/path/xdebug.so
Краанг Прем'єр

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

Якщо це "все розмито разом", ви можете часто спробувати ol "" переглянути вихідний код ". Іноді звалища, повідомлення та винятки здаються такими, що вони є лише одним довгим рядком, коли виявляється, що розриви рядків просто не відображаються. Особливо дерева XML.

Крім того, я колись створив для цього маленький маленький інструмент під назвою InteractiveVarDump . Це, звичайно, має свої межі, але іноді це може бути дуже зручно. Незважаючи на те, що він був розроблений на увазі PHP 5.


1

Найкращий, який і найпростіший спосіб отримати гарний var_dump - це використовувати xDebug (повинен мати для будь-якого PHP-розробника)

У консолі: 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_enкодуйте цю змінну:

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.