ทำให้ var_dump ดูน่ารัก


132

ฉันได้$_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 เกี่ยวกับการจัดการสตริงหลังจากโพสต์แล้ว


48
ใช่. echo '<pre>'; var_dump($data); echo '</pre>'.
Amal Murali

9
เวทมนตร์นี้คืออะไร!
พลัมเมอร์

วิธีการเกี่ยวกับการใช้ var_masterpiece chrome.google.com/webstore/detail/varmasterpiece/…
vijayrana

ฉันไม่คิดว่านี่เป็นใน webstore เมื่อคำถามถูกถามครั้งแรก คุ้มค่ากับการยิงสำหรับทุกคนที่มองเข้าไป
Plummer

1
print_r($data)ฉันคิดว่าคุณต้องการเพียงแค่ php.net/manual/en/function.print-r.php
Drew Baker

คำตอบ:


369

var_export()ผมรัก ถ้าคุณชอบคัดลอก / วางรหัสได้ลอง:

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

หรือแม้แต่บางอย่างเช่นนี้เพื่อเน้นสีไวยากรณ์:

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

print_r()คุณสามารถทำเช่นเดียวกันกับ สำหรับvar_dump()คุณเพียงแค่ต้องเพิ่ม<pre>แท็ก:

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

7
โปรดทราบว่าecho,, var_exportและhighlight_stringเป็นฟังก์ชัน php ทั้งหมดและจำเป็นต้องอยู่ใน<?php ?>บล็อก ใช่แม้ว่าบรรทัดฟังก์ชั่น highlight_string จะมีคู่อยู่ภายใน <? php?> แต่ก็จำเป็นต้องมีคู่ข้างนอกด้วยเช่นกัน
BeowulfNode42

รูปแบบที่สั้นลงของ var_dump นี้:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg

40

ลองxdebug extension สำหรับ php

ตัวอย่าง:

<?php var_dump($_SERVER); ?>

ขาออก:

ป้อนคำอธิบายรูปภาพที่นี่


7
โปรดทราบว่า xdebug ทำให้ ALLOT เป็นมากกว่า var_dump ที่สวยงาม :)
Latheesan

ฉันเคยเห็นเช่นนี้เมื่อทำ var_dump แต่ตอนนี้ฉันมี wampserver 2.5 ด้วย php 5.5.12 ฉันเห็นว่าไม่ได้ฟอร์แมต ทำไมฉันถึงได้เห็นรูปถ่ายของคุณมาก่อนโดยไม่ต้องติดตั้งอะไรมากไปกว่า wampserver
Limon

1
มันเซ็กซี่มากอย่างแน่นอน ไม่แน่ใจว่าทำไมจึงไม่ทำเครื่องหมายว่าเป็นวิธีแก้ไขปัญหาที่ถูกต้อง แต่คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการติดตั้งได้ บน Windows, มันเป็นเพียงแค่extension=php_xdebug.dllไม่zend_extension=/some/really/long/specific/path/xdebug.so
Kraang นายกรัฐมนตรี


10

ฉันได้เพิ่มคำตอบ @AbraCadaver แล้ว ฉันได้รวมสคริปต์จาวาสคริปต์ซึ่งจะลบ 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


3

หากเป็น "ทั้งหมดถูกรวมเข้าด้วยกัน" คุณมักจะลอง ol '"ดูซอร์สโค้ด" บางครั้งการทิ้งข้อความและข้อยกเว้นดูเหมือนว่าพวกเขาเป็นเพียงหนึ่งสายยาวเมื่อปรากฏว่าการแบ่งบรรทัดก็ไม่แสดง ต้นไม้ XML โดยเฉพาะ

หรือฉันเคยสร้างเครื่องมือเล็ก ๆ ที่เรียกว่าInteractiveVarDumpเพื่อจุดประสงค์นี้ แน่นอนว่ามันมีขีด จำกัด แต่บางครั้งก็สะดวกมาก แม้ว่ามันจะถูกออกแบบด้วย PHP 5 ในใจ


1

สิ่งที่ดีที่สุดและวิธีที่ง่ายที่สุดในการรับ 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/

ขอให้โชคดีและสนุก !!!

ผลลัพธ์



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

}

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

ฉันดูเหมือนจะไม่มีตัวแทนมากพอที่จะปิดสิ่งนี้ซ้ำซ้อน แต่มันก็เป็นสิ่งที่คนอื่นสามารถทำได้ ฉันโพสต์สิ่งเดียวกันมากกว่าที่ทางเลือก Var_dump ที่สวย / ให้ข้อมูลมากกว่าใน PHP หรือไม่แต่เพื่อประหยัดเวลาฉันจะคัดลอก / วางที่นี่ด้วย:

ฉันต้องเพิ่มคำตอบอื่นที่นี่เพราะฉันไม่ต้องการทำตามขั้นตอนในการแก้ปัญหาอื่น ๆ มันง่ายมากและไม่ต้องมีส่วนขยายรวมถึงอื่น ๆ และเป็นสิ่งที่ฉันต้องการ มันง่ายและรวดเร็วมาก

ก่อนอื่นเพียงแค่ json_encode ตัวแปรที่เป็นปัญหา:

echo json_encode($theResult);

คัดลอกผลลัพธ์ที่คุณได้รับลงในตัวแก้ไข JSON ที่http://jsoneditoronline.org/เพียงคัดลอกลงในบานหน้าต่างด้านซ้ายคลิกคัดลอก> และมันจะพิมพ์ JSON ในรูปแบบต้นไม้ที่สวยงามมาก

สำหรับแต่ละคน แต่หวังว่าสิ่งนี้จะช่วยให้บางคนมีทางเลือกที่ดีกว่า! :)



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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.