Сделать var_dump красивым
У меня есть простой запрос $_GET[]
var var для показа тестовых данных при выводе запросов из БД.
<?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 по управлению строкой после публикации.
Ответы
Ответ 1
Мне очень нравится var_export()
. Если вам нравится код для копирования/вставки, попробуйте:
echo '<pre>' . var_export($data, true) . '</pre>';
Или даже что-то вроде этого для подсветки синтаксиса цвета:
highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");
Ответ 2
Попробуйте xdebug расширение для php.
Пример:
<?php var_dump($_SERVER); ?>
Выходы:
![enter image description here]()
Ответ 3
Использовать предварительно отформатированный HTML-код
echo '<pre>';
var_dump($data);
echo '</pre>';
Ответ 4
Я добавил дополнение к ответам @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();
}
Результат до:
![enter image description here]()
Результат после:
![enter image description here]()
Теперь у нас нет начального и закрывающего тега php
Ответ 5
Если это "все сработало вместе", вы можете часто давать исходный код "ol". Иногда дампы, сообщения и исключения кажутся, что они всего лишь одна длинная строка, когда оказывается, что разрывы строк просто не отображаются. Особенно XML-деревья.
Кроме того, я создал небольшой маленький инструмент под названием InteractiveVarDump для этой цели. Это, безусловно, имеет свои пределы, но иногда это может быть очень удобно. Несмотря на то, что он был разработан с учетом PHP 5.
Ответ 6
Вы можете попробовать также Xdebug для более информативных дампов var
Ответ 7
Лучший и самый простой способ получить хороший 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/
Удачи и получайте удовольствие!!!
Результат
Ответ 8
Вы можете использовать этот debugVar()
вместо var_dump()
Отъезд: https://github.com/E1NSER/php-debug-function
Ответ 9
Не совсем var_dump
, но полезно: http://dbug.ospinto.com/
Ответ 10
Вот моя функция, чтобы иметь довольно 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>";
}
Ответ 11
Этот вопрос довольно старый, но я нашел что-то действительно полезное:
https://symfony.com/doc/current/components/var_dumper.html
Чтобы установить symfony/var-dumper: (запустите это в терминале)
composer require symfony/var-dumper --dev
Чтобы иметь действительно красивый var_dump, но не раздражать файлы в ваших проектах, вы можете установить его глобально:
в терминале выполните:
composer global require symfony/var-dumper
и добавьте эту строку в файл php.ini
:
auto_prepend_file = ${HOME}/.composer/vendor/autoload.php
Теперь эти две функции (намного) лучше:
dump($var); //just a nice var_dump
//and
dd($var); //like the first one, but exits the process after the dump.
Вывод содержит Javascript, который позволяет иметь выпадающие списки (например, дерево в вашей файловой системе)
Обратите внимание, что это сообщение может быть устаревшим при его чтении.
Ответ 12
Я написал функцию (debug_display
), которая может 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);
}
Ответ 13
Использование
echo nl2br(var_dump());
Это должно работать ^^