使var_转储看起来很漂亮

我有一个简单的$_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在发布后操作字符串的建议持开放态度。

237633 次浏览

使用

echo nl2br(var_dump());

这应该工作^^

尝试__PHP的ABC0扩展。

示例:

<?php var_dump($_SERVER); ?>

输出:

enter image description here

我真的很喜欢__ABC 0。如果您喜欢可复制/粘贴的代码,请尝试:

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

或者甚至像这样的颜色语法突出显示:

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

可重用功能:

function highlight_array($array, $name = 'var') {
highlight_string("<?php\n\$$name =\n" . var_export($array, true) . ";\n?>");
}

您可以对print_r()执行相同的操作。对于var_dump(),您只需添加<pre>标记:

echo '<pre>';
var_dump($data);
echo '</pre>';
获得好的var_转储

的最好和最简单的方法是使用Xdebug(任何PHP开发人员都必须使用)。 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/.

祝你好运,玩得开心!

结果

使用预设格式的HTML元素

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

您可以使用这个debugVar()来代替var_dump()

退房:https://github.com/e1nser/php-debug-function

下面是我函数,它有一个非常不同的_转储。结合Xdebug,它有助于更好地了解我们正在倾倒的东西。

我对Xdebug的显示进行了一些改进(在周围留出一些空间,在值之间使用分隔符,对长变量进行包装等)。

调用该函数时,可以设置标题、背景和文本颜色来区分页面中的所有var_转储。

或者不是;)

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


}

我对@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的开始和结束标记。

我写了一个函数(__abc0),可以打印,数组,对象和文件信息的漂亮的方式。

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

如果它是“全部混合在一起”,你可以经常尝试一下“查看源代码”。有时,转储、消息和异常看起来就像是一个很长的字符串,而实际上换行符根本不显示。特别是XML树。

另外,我曾经为此创建了一个名为交互式VARDUMP的小工具。它当然有其局限性,但有时也可以非常方便。尽管它在设计时考虑到了PHP5。

有一个symfony包可以做到这一点:__abc0。

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

我似乎没有足够的代表来关闭这个副本,但如果其他人可以做到这一点。我在一个更漂亮/信息丰富的VAR_转储替代PHP?上发布了相同的内容,但为了节省时间,我也将其复制/粘贴到这里:

我不得不在这里添加另一个答案,因为我不想重复其他解决方案中的步骤。它非常简单,不需要扩展,包括等,是我喜欢的。这很容易,也很快。

首先,使用JSON_对相关变量进行编码:

echo json_encode($theResult);

将您得到的结果复制到JSON编辑器的http://jsoneditoronline.org/中,只需将其复制到左侧窗格中,单击Copy>,它就会以一种非常漂亮的树格式打印出JSON.

每个人都有自己的选择,但希望这能帮助其他人有一个更好的选择!:)

这里有一个替代的,积极维护的开源var_dump的类固醇:

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

它可以在零设置的情况下工作,并且比Xdebug的var_转储和symfony/var-dumper更有用。

使用kint动态绕过转储对象大小限制的示例:

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

下面是一张截图:

kint

下面是我创建的一个函数,用于以一种很好的方式显示数组:

function nicevar($var,$title=''){
if(is_array($var)){
$table = '<table>';
if($title){
$table .= '<tr><th colspan="20">'.$title.'</th></tr>';
}
foreach($var as $k => $v){
$table .= '<tr>';
$table .= '<td><b>'.$k.'</b></td>';
$table .= '<td>';
if(is_array($v)){
$table .= nicevar($v);
}else{
$table .=  $v;
}
$table .= '</td>';
$table .= '</tr>';
}
$table .= '</table>';
}else{
$table = $var;
}
return $table;
}

使用:

echo nicevar($_SESSION['debug'],'Structure of debug');

使用此样式使其美观:

<style>
body {
padding: 30px;
}


table {
margin: 5px;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #9fff96;
}
th, td {
padding: 2px;
border-spacing: 2px;
}
</style>

在CI4中,更简单的方法是使输出更漂亮:

dd($this->request);

这是结果。