177

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

4

15 回答 15

472

我真的很爱var_export()。如果您喜欢可复制/粘贴的代码,请尝试:

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>';
于 2013-11-06T15:58:06.667 回答
48

尝试php 的xdebug扩展。

例子:

<?php var_dump($_SERVER); ?>

输出:

在此处输入图像描述

于 2013-11-06T15:53:10.483 回答
34

使用预格式化的 HTML 元素

    echo '<pre>';
        var_dump($data);
    echo '</pre>';
于 2017-08-01T21:24:10.430 回答
12

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

于 2018-01-27T13:29:37.647 回答
5

我似乎没有足够的代表来关闭它作为重复,但如果其他人可以做到这一点,它就是一个。我在A more pretty/informative Var_dump alternative in PHP? 上发布了同样的内容?但为了节省时间,我也会在这里复制/粘贴:

我不得不在这里添加另一个答案,因为我真的不想完成其他解决方案中的步骤。它非常简单,不需要扩展、包含等,这是我更喜欢的。这非常容易而且非常快。

首先只是 json_encode 有问题的变量:

echo json_encode($theResult);

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

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

于 2020-02-27T13:43:06.613 回答
3

如果它“全部混合在一起”,您通常可以尝试使用“查看源代码”。有时,转储、消息和异常似乎只是一个长字符串,而事实证明根本不显示换行符。尤其是 XML 树。

或者,我曾经为此创建了一个名为InteractiveVarDump的小工具。它当然有其局限性,但有时也非常方便。尽管它的设计考虑了 PHP 5。

于 2018-08-21T08:55:02.397 回答
2

获得好 var_dump 的最佳和最简单的方法是使用 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/

祝好运并玩得开心点 !!!

结果

于 2016-08-17T20:30:46.580 回答
2

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

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

它适用于零设置,比 Xdebug 的 var_dump 和 symfony/var-dumper 更有用。

使用 Kint 即时绕过转储对象大小限制的示例:

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

这是一个屏幕截图:

kint

于 2020-10-07T12:09:59.167 回答
1

你可以用这个debugVar()代替var_dump()

查看:https ://github.com/E1NSER/php-debug-function

于 2017-09-12T14:09:45.987 回答
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>";

}
于 2017-09-17T18:11:17.237 回答
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();
}
于 2019-03-18T14:43:23.213 回答
0

为此有一个 Symfony 软件包:https ://symfony.com/doc/current/components/var_dumper.html 。

于 2019-02-15T23:06:52.793 回答
0

这是我为以一种很好的方式显示数组而制作的函数:

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>
于 2021-10-17T11:47:45.433 回答
-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);
}
于 2018-07-11T12:19:54.780 回答
-12

采用

echo nl2br(var_dump());

这应该工作^^

于 2013-11-06T15:50:31.753 回答