Цветной дамп var() и ошибки
Как я могу установить стиль для функции var_dump()
и PHP стиль ошибок, как на следующем изображении?
На данный момент у меня есть следующий вид var_dump()
(с <pre>var_dump(...)</pre>
, без него все будет в одной строке) и просто обычный текст для ошибок.
Я что-то искал в PHP цветные ошибки, стили var_dump
, но ничего не смог найти.
Я использовал OpenServer в качестве локального хоста, и в предыдущей версии я были те же стили для ошибок, но теперь просто обычный текст. Реально ли это настроить?
4 answers
Вы получаете цветной вывод при установке и включении Xdebug:
Xdebug заменяет функцию PHP
var_dump()
для отображения переменных. Версия Xdebug включает разные цвета для разных типов и устанавливает ограничения на количество элементов массива/свойств объектов, максимальную глубину и длину строк. Есть также несколько других функций, связанных с отображением переменных.
Вы можете включить/отключить это с помощью параметра ini xdebug.overload_var_dump
По по умолчанию Xdebug перегружает
var_dump()
собственной улучшенной версией для отображения переменных, когда для параметра html_errors php.ini установлено значение 1. В случае, если вы этого не хотите, вы можете установить этот параметр равным 0, но сначала проверьте, не разумнее ли отключить html_errors.
Проверьте документацию для получения дополнительной информации.
Обратите внимание, что вы не хотите устанавливать расширение Xdebug на рабочий сервер, так как это значительно замедлит выполнение кода.
Попробуйте эту функцию.. ..для переопределения var_dump()
или использования в качестве другой именованной функции. Я пользуюсь им уже много лет, даже не могу вспомнить, откуда он взялся.
function var_dump($data, $label='', $return = false) {
$debug = debug_backtrace();
$callingFile = $debug[0]['file'];
$callingFileLine = $debug[0]['line'];
ob_start();
var_dump($data);
$c = ob_get_contents();
ob_end_clean();
$c = preg_replace("/\r\n|\r/", "\n", $c);
$c = str_replace("]=>\n", '] = ', $c);
$c = preg_replace('/= {2,}/', '= ', $c);
$c = preg_replace("/\[\"(.*?)\"\] = /i", "[$1] = ", $c);
$c = preg_replace('/ /', " ", $c);
$c = preg_replace("/\"\"(.*?)\"/i", "\"$1\"", $c);
$c = preg_replace("/(int|float)\(([0-9\.]+)\)/i", "$1() <span class=\"number\">$2</span>", $c);
// Syntax Highlighting of Strings. This seems cryptic, but it will also allow non-terminated strings to get parsed.
$c = preg_replace("/(\[[\w ]+\] = string\([0-9]+\) )\"(.*?)/sim", "$1<span class=\"string\">\"", $c);
$c = preg_replace("/(\"\n{1,})( {0,}\})/sim", "$1</span>$2", $c);
$c = preg_replace("/(\"\n{1,})( {0,}\[)/sim", "$1</span>$2", $c);
$c = preg_replace("/(string\([0-9]+\) )\"(.*?)\"\n/sim", "$1<span class=\"string\">\"$2\"</span>\n", $c);
$regex = array(
// Numberrs
'numbers' => array('/(^|] = )(array|float|int|string|resource|object\(.*\)|\&object\(.*\))\(([0-9\.]+)\)/i', '$1$2(<span class="number">$3</span>)'),
// Keywords
'null' => array('/(^|] = )(null)/i', '$1<span class="keyword">$2</span>'),
'bool' => array('/(bool)\((true|false)\)/i', '$1(<span class="keyword">$2</span>)'),
// Types
'types' => array('/(of type )\((.*)\)/i', '$1(<span class="type">$2</span>)'),
// Objects
'object' => array('/(object|\&object)\(([\w]+)\)/i', '$1(<span class="object">$2</span>)'),
// Function
'function' => array('/(^|] = )(array|string|int|float|bool|resource|object|\&object)\(/i', '$1<span class="function">$2</span>('),
);
foreach ($regex as $x) {
$c = preg_replace($x[0], $x[1], $c);
}
$style = '
/* outside div - it will float and match the screen */
.dumpr {
margin: 2px;
padding: 2px;
background-color: #fbfbfb;
float: left;
clear: both;
}
/* font size and family */
.dumpr pre {
color: #000000;
font-size: 9pt;
font-family: "Courier New",Courier,Monaco,monospace;
margin: 0px;
padding-top: 5px;
padding-bottom: 7px;
padding-left: 9px;
padding-right: 9px;
}
/* inside div */
.dumpr div {
background-color: #fcfcfc;
border: 1px solid #d9d9d9;
float: left;
clear: both;
}
/* syntax highlighting */
.dumpr span.string {color: #c40000;}
.dumpr span.number {color: #ff0000;}
.dumpr span.keyword {color: #007200;}
.dumpr span.function {color: #0000c4;}
.dumpr span.object {color: #ac00ac;}
.dumpr span.type {color: #0072c4;}
';
$style = preg_replace("/ {2,}/", "", $style);
$style = preg_replace("/\t|\r\n|\r|\n/", "", $style);
$style = preg_replace("/\/\*.*?\*\//i", '', $style);
$style = str_replace('}', '} ', $style);
$style = str_replace(' {', '{', $style);
$style = trim($style);
$c = trim($c);
$c = preg_replace("/\n<\/span>/", "</span>\n", $c);
if ($label == ''){
$line1 = '';
} else {
$line1 = "<strong>$label</strong> \n";
}
$out = "\n<!-- Dumpr Begin -->\n".
"<style type=\"text/css\">".$style."</style>\n".
"<div class=\"dumpr\">
<div><pre>$line1 $callingFile : $callingFileLine \n$c\n</pre></div></div><div style=\"clear:both;\"> </div>".
"\n<!-- Dumpr End -->\n";
if($return) {
return $out;
} else {
echo $out;
}
}
Вы также можете использовать это расширение для цветной отладки: (это очень легко установить)
Http://www.sitepoint.com/var_dump-introducing-symfony-vardumper/
Symfony VarDumper - это компонент, предназначенный для замены ваших var_dumps. Он выполняет по существу те же функции, но предоставляет вам гораздо, гораздо больше информации в гораздо более красивом формате. Это тот var_dump, который вы всегда хотели.
Xdebug - это то, что вы ищете. Примеры сценариев для установки в Ubuntu:
[Поиск Xdebug]
$ apt-cache search xdebug
[Установить Xdebug]
$ sudo apt-get install php-xdebug
[Перезапустите Apache, чтобы он заработал]
$ sudo /etc/init.d/apache2 restart