Làm cho var_dump trông thật đẹp


131

Tôi có một bộ $_GET[]truy vấn var đơn giản để hiển thị dữ liệu thử nghiệm khi kéo xuống các truy vấn từ DB.

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

Khi tôi làm var_dump, như mong đợi, đó là chuỗi mảng lớn, tất cả đều bị nhòe với nhau. Có cách nào để thêm ngắt dòng ít nhất cho điều này hoặc hiển thị var_dumptheo cách dễ đọc hơn không? Tôi mở các đề xuất của jQuery về thao tác chuỗi sau khi được đăng.


48
Vâng. echo '<pre>'; var_dump($data); echo '</pre>'.
Amal Murali

9
BÀI VIẾT NÀY LÀ GÌ?!
Plummer

làm thế nào về việc sử dụng var_masterunch. chrome.google.com/webstore/detail/varmasterunch/ từ
vijayrana

Tôi không nghĩ đây là trong cửa hàng trực tuyến khi câu hỏi ban đầu được hỏi. Đáng giá cho bất cứ ai nhìn vào nó.
Plummer

1
Tôi nghĩ bạn chỉ muốn print_r($data). php.net/manual/en/feft.print-r.php
Drew Baker

Câu trả lời:


368

Tôi thực sự yêu var_export(). Nếu bạn thích mã sao chép / dán có thể, hãy thử:

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

Hoặc thậm chí một cái gì đó như thế này để tô sáng cú pháp màu:

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

Bạn có thể làm tương tự với print_r(). Đối với var_dump()bạn chỉ cần thêm các <pre>thẻ:

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

7
Lưu ý rằng echo, var_exporthighlight_stringlà tất cả các hàm php và cần nằm trong một <?php ?>khối. Có ngay cả khi dòng chức năng highlight_ chuỗi có cặp <? Php?> Bên trong, cũng cần một cặp xung quanh bên ngoài.
BeowulfNode42

Một biến thể ngắn hơn của var_dump này:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg

40

Hãy thử mở rộng xdebug cho php.

Thí dụ:

<?php var_dump($_SERVER); ?>

Đầu ra:

nhập mô tả hình ảnh ở đây


7
Nhắc bạn, xdebug thực hiện ALLOT không chỉ là var_dump đẹp :)
Latheesan

Tôi đã từng thấy như thế này khi thực hiện var_dump, nhưng bây giờ tôi có wamperver 2.5 với php 5.5.12 tôi thấy nó không được định dạng. Làm thế nào mà tôi có thể nhìn thấy như ảnh của bạn trước đây, mà không cần cài đặt bất cứ thứ gì ngoài wamperver?
Limon

1
Điều này chắc chắn là rất gợi cảm. Không chắc chắn tại sao điều này không được đánh dấu là giải pháp chính xác, nhưng bạn có thể cung cấp thêm chi tiết về quy trình cài đặt. Trên cửa sổ, nó chỉ là extension=php_xdebug.dll, không phảizend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime

22

Sử dụng phần tử HTML được định dạng sẵn

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

10

Tôi đã bổ sung vào câu trả lời @AbraCadaver. Tôi đã bao gồm một tập lệnh javascript sẽ xóa thẻ bắt đầu và đóng php. Chúng tôi sẽ có bãi sạch đẹp hơn.

Có thể là một người như thế này quá.

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

Kết quả trước:

nhập mô tả hình ảnh ở đây

Kết quả sau:

nhập mô tả hình ảnh ở đây

Bây giờ chúng tôi không có thẻ bắt đầu và đóng php


3

Nếu đó là "tất cả cùng nhòe", bạn thường có thể thử "mã nguồn xem" của ol. Đôi khi các bãi chứa, tin nhắn và ngoại lệ có vẻ như chúng chỉ là một chuỗi dài khi hóa ra rằng các dòng bị ngắt đơn giản là không hiển thị. Đặc biệt là cây XML.

Ngoài ra, tôi đã từng tạo ra một công cụ nhỏ gọi là InteractiveVarDump cho mục đích này. Nó chắc chắn có giới hạn của nó nhưng đôi khi nó cũng có thể rất thuận tiện. Mặc dù nó được thiết kế với PHP 5 trong tâm trí.


1

Cách tốt nhất và dễ nhất để có var_dump đẹp là sử dụng xDebug (phải có cho bất kỳ nhà phát triển php nào) Cách cài đặt Debian

Trong bảng điều khiển: apt-get install php-xdebug sau đó, bạn nên mở php.ini (tùy thuộc vào ngăn xếp bạn sử dụng) cho nó /etc/php/7.0/fpm/php.ini

Tìm kiếm display_errors

đặt giống nhau -> display_errors = On

Kiểm tra html_errorstrong cùng một tập tin dưới đây một chút, nó cũng phảiOn

Lưu và thoát

Sau khi mở /etc/php/7.0/fpm/conf.d/20-xdebug.ini

Và thêm vào cuối: `` `xdebug.cli_color = 1

`` `Lưu và thoát.

Rất nhiều tùy chọn và tài liệu có sẵn khác cho xdebug có thể được thành lập tại đây.

https://xdebug.org/docs/

Chúc may mắn và vui vẻ !!!

Kết quả



1

Đây là chức năng của tôi để có một var_dump khá. Kết hợp với Xdebug , nó giúp ích rất nhiều để có cái nhìn rõ hơn về những gì chúng ta đang bán phá giá.

Tôi đã cải thiện một chút hiển thị của Xdebug (cung cấp một số khoảng trống xung quanh, dấu phân cách giữa các giá trị, bọc các biến dài, v.v.).

Khi bạn gọi hàm, bạn có thể đặt tiêu đề, nền, màu văn bản để phân biệt tất cả var_dump của bạn trong một trang.

Hay không ;)

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

Tôi dường như không có đủ đại diện để đóng cái này như một bản sao, nhưng nó là một nếu người khác có thể làm điều đó. Tôi đã đăng điều tương tự tại Một thay thế Var_dump đẹp hơn / nhiều thông tin hơn trong PHP? nhưng để tiết kiệm thời gian, tôi cũng sẽ sao chép / dán nó vào đây:

Tôi đã phải thêm một câu trả lời ở đây vì tôi không thực sự muốn trải qua các bước trong các giải pháp khác. Nó cực kỳ đơn giản và không yêu cầu mở rộng, bao gồm vv và là những gì tôi thích. Nó rất dễ dàng và rất nhanh.

Đầu tiên chỉ cần json_encode biến trong câu hỏi:

echo json_encode($theResult);

Sao chép kết quả mà bạn nhận được vào Trình soạn thảo JSON tại http://jsoneditoronline.org/ chỉ cần sao chép nó vào khung bên trái, nhấp vào Sao chép> và nó sẽ in JSON theo định dạng cây rất đẹp.

Với mỗi người, nhưng hy vọng điều này sẽ giúp một số người khác có thêm một lựa chọn tốt đẹp! :)



-2

Tôi đã viết một hàm ( debug_display) có thể in, mảng, đối tượng và thông tin tệp theo cách khá hay.

<?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

Sử dụng

echo nl2br(var_dump());

Điều này sẽ làm việc ^^


9
var_dump không trả về bất cứ thứ gì, nó xuất ra trực tiếp.
AbraCadaver
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.