Haz que var_dump se vea bonito


132

Tengo un $_GET[]conjunto de var de consulta simple para mostrar datos de prueba al extraer consultas de la base de datos.

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

Cuando lo hago var_dump, como era de esperar, es esta cadena de matriz grande la que está todo mezclada. ¿Hay alguna manera de agregar saltos de línea al menos para esto o mostrarlos var_dumpde una manera que sea más legible? Estoy abierto a sugerencias de jQuery sobre la manipulación de la cadena después de que se publique.


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

9
¡¿QUÉ ES ESTA MAGIA ?!
Plummer


No creo que esto estuviera en la tienda web cuando se hizo la pregunta inicialmente. Vale la pena intentarlo para cualquiera que lo investigue.
Plummer

1
Creo que solo quieres print_r($data). php.net/manual/en/function.print-r.php
Drew Baker

Respuestas:


369

Me encanta var_export(). Si te gusta copiar / pegar código, prueba:

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

O incluso algo como esto para resaltar la sintaxis de color:

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

Puedes hacer lo mismo con print_r(). Para var_dump()usted solo necesitaría agregar las <pre>etiquetas:

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

77
Tenga en cuenta que echo, var_exporty highlight_stringson todas las funciones de php y deben estar dentro de un <?php ?>bloque. Sí, aunque la línea de función highlight_string tiene un par <? Php?> Dentro, también se necesita un par alrededor del exterior.
BeowulfNode42

Una variación más corta de este var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg

40

Tratar extensión xdebug para php.

Ejemplo:

<?php var_dump($_SERVER); ?>

Salidas:

ingrese la descripción de la imagen aquí


77
Eso sí, xdebug hace MUCHO más que simplemente var_dump :)
Latheesan

Solía ​​ver así cuando hacía var_dump, pero ahora que tengo wampserver 2.5 con php 5.5.12 lo veo sin formato. ¿Cómo es que pude ver como tu foto antes, sin instalar nada más que servidor de agua?
Limon

1
Esto definitivamente es muy sexy. No estoy seguro de por qué esto no está marcado como la solución correcta, pero podría dar más detalles sobre el proceso de instalación. En Windows, era justo extension=php_xdebug.dll, nozend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime

22

Usar elemento HTML preformateado

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

10

He hecho una adición a las respuestas de @AbraCadaver. He incluido un script javascript que eliminará la etiqueta de inicio y cierre de php. Tendremos limpio más basurero bonito.

Puede ser alguien así también.

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

Resultado anterior:

ingrese la descripción de la imagen aquí

Resultado después de:

ingrese la descripción de la imagen aquí

Ahora no tenemos etiqueta de inicio y cierre de php


3

Si se trata de "todo junto", a menudo puede probar el viejo "ver código fuente". A veces, los volcados, los mensajes y las excepciones parecen ser solo una cadena larga cuando resulta que los saltos de línea simplemente no se muestran. Especialmente árboles XML.

Alternativamente, una vez he creado una pequeña herramienta llamada InteractiveVarDump para este mismo propósito. Ciertamente tiene sus límites, pero a veces también puede ser muy conveniente. Aunque fue diseñado con PHP 5 en mente.


1

La mejor y más fácil forma de obtener un buen var_dump es usar xDebug (debe tenerlo para cualquier dev php). Instalación de la forma Debian

En la consola: apt-get install php-xdebug después de eso, debe abrir php.ini (depende de la pila que use) para su /etc/php/7.0/fpm/php.ini

Buscar display_errors

establecer mismo -> display_errors = On

Cheque html_errors mismo archivo un poco más abajo, también debe serOn

Guardar y Salir

Después de abierto /etc/php/7.0/fpm/conf.d/20-xdebug.ini

Y agregue al final: `` `xdebug.cli_color = 1

`` `` Guardar y salir.

Aquí se pueden encontrar muchas otras opciones y documentación disponibles para xdebug.

https://xdebug.org/docs/

Buena suerte y diviertete !!!

Resultado



1

Aquí está mi función para tener un bonito var_dump. Combinado con Xdebug , ayuda mucho tener una mejor visión de lo que estamos descargando.

Mejoré un poco la visualización de Xdebug (dar algo de espacio, separador entre valores, envolver variables largas, etc.).

Cuando llama a la función, puede establecer un título, un fondo, un color de texto para distinguir todos sus var_dump en una página.

O no ;)

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

Parece que no tengo suficiente representante para cerrar esto como un duplicado, pero es uno si alguien más puede hacer eso. ¿ Publiqué lo mismo en una alternativa Var_dump más bonita / informativa en PHP?pero para ahorrar tiempo, también lo copiaré / pegaré aquí:

Tuve que agregar otra respuesta aquí porque realmente no quería seguir los pasos de las otras soluciones. Es extremadamente simple y no requiere extensiones, incluye etc. y es lo que prefiero. Es muy fácil y muy rápido.

Primero solo json_encode la variable en cuestión:

echo json_encode($theResult);

Copie el resultado que obtiene en el Editor JSON en http://jsoneditoronline.org/ simplemente cópielo en el panel lateral izquierdo, haga clic en Copiar> e imprime el JSON en un formato de árbol realmente agradable.

Para cada uno lo suyo, pero espero que esto ayude a otros a tener una buena opción más. :)



-2

Escribí una función ( debug_display) que puede imprimir, matrices, objetos e información de archivos de una manera bonita.

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

Utilizar

echo nl2br(var_dump());

Esto debería funcionar ^^


9
var_dump no devuelve nada, emite directamente.
AbraCadaver
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.