¿Una alternativa Var_dump más bonita / informativa en PHP? [cerrado]
130
Cada programador PHP decente tiene un print_ro var_dumpcontenedor que usan, aman y asignan teclas de acceso directo, ¿por qué no compartimos nuestras favoritas ?
solo uso echo '<pre>'; print_r ($ var); exit; Ni siquiera lo cierro. Supongo que no soy decente
Funky Dude
Edité el enlace para apuntar a github, donde continúo con el desarrollo de Kint, y si todavía tiene algún problema, avíseme por cualquier medio.
raveren
1
¡Hola, Kint es genial! Simplemente me salvó el día.
István Ujj-Mészáros
2
¿Por qué una pregunta que es 100% un aviso publicitario de un programa está en una versión de "I make my own var_dump ()"? La primera pregunta sería por qué se permite la publicidad de un producto como pregunta.
m3nda
11
Porque hice la herramienta más de un año después después de hacer la pregunta. No sé qué te molesta, creé una herramienta de código abierto madura de más de 10k líneas y la estoy mejorando constantemente años después. Di mi propia respuesta en la pregunta, como es tradición en SO.
raveren
Respuestas:
70
Un año completo de tiempo y trabajo después de preguntar esto, finalmente he abierto mi versión de var_dump, Kint. Lea sobre esto en la página del proyecto , o directamente en github .
Aquí hay una captura de pantalla:
Perdón por el enchufe :)
EDITAR: Me gustaría recordarles a los comentaristas que este no es un foro de soporte, si tiene problemas / desea una función, presente un problema . El soporte para solicitar comentarios se marcará para su eliminación.
Tuve que cambiar el tamaño de fuente y embellecer el código CSS, pero buen trabajo, me gusta ... viniendo de un usuario de Krumo desde hace mucho tiempo
Quamis
1
qué cambios realizó, si cree que es una mejora, puede enviarme los cambios a [email protected]
raveren
Estaba acostumbrado a Krumo y quería fuentes más pequeñas, y también embellecí el código CSS. Nada de lo que se puede llamar una mejora real, más como una vieja costumbre :)
Quamis
Bueno, la idea era que se supone que el CSS se comprime junto con el JS para interferir lo menos posible con la salida real. Por supuesto, también se planeó una sangría considerable de la fuente generada, pero actualmente no tengo tiempo para dedicar a Kint ..
raveren
2
Solo como ejemplo, Kint muestra variables protegidas y privadas si volca un objeto, krumo no (porque supongo que solo el primero usa clases de reflexión). En términos generales, encontré que Kint era superior; aunque también tuve que ajustar el CSS para hacerlo más utilizable (esa fuente enorme no funciona muy bien cuando se descargan toneladas de propiedades anidadas). Ah, y el código detrás de él no es un desastre, algo que no se puede decir de Krumo (¡lo siento, autor de Krumo!)
Mahn
45
Lo que prefiero es la var_dumpfunción, como lo proporciona la extensión Xdebug : simplemente instale la extensión (fácil, tanto en Windows como en Linux) , y var_dumpobtenga un mejor resultado:
mejor formateo
HTML
colores
y tiene opciones para ajustar la cantidad de información que se debe mostrar
Y una captura de pantalla rápida:
Y, por supuesto, Xdebug trae muchas otras cosas útiles, como la depuración remota (es decir, la depuración gráfica de su aplicación PHP, en Eclipse PDT, por ejemplo) , perfiles, ...
Necesito usar esta clase de formato xdebug en un host compartido. ¿Hay alguna forma de incluirlo en mi proyecto personal?
Anyul Rivas
1
Si no es el administrador (raíz) de su servidor, lo más probable es que no pueda instalar una extensión PHP (nunca he visto un servicio de alojamiento compartido que instale uno para instalar extensiones PHP) ; así que no, no podrá usar Xdebug (de todos modos, instalarlo en un servidor de producción generalmente no es una buena idea: después de todo, es una extensión de depuración) ; tendrá que recurrir a una implementación basada en PHP de una función de salida variable (vea algunas otras respuestas)
Pascal MARTIN
1
Sí, solo necesitaba que la clase me enviara algo de salida cuando se produce un error.
Me encanta esta función: fácil y claro, y lo mencioné muy fácil :)
derekdreery
Gracias. Lo uso todo el tiempo. Debería estar integrado en PHP realmente. Puede poner su propio formato, utilizando el segundo parámetro. por ejemplo echo $ pretty ($ some_variable, "-");
Guillermo Phillips
77
Esto combina maravillosamente todas las peores características de print_r, var_dump y var_export. Sin escape de HTML, acepta solo un parámetro, se cuelga de la recursividad, no puede devolver la salida y, para colmo, es totalmente ilegible . No quiero ser un imbécil, pero los comentarios solo hacen que parezca tan perfecto.
raveren
Gracias por tu comentario @Raveren. Si pudieras ser más específico, mejoraré mi respuesta.
Guillermo Phillips
2
En mi opinión, la mejor solución de línea única es simple function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump es una función muy detallada, maneja todos los casos extremos de PHP (de los cuales hay MUCHOS) y es 100% estable, aunque no tan legible. Pero al final del día, si encuentra que su implementación es la mejor para usted, es lo que definitivamente debe usar.
raveren
16
Está buscando Krumo ( Advertencia, alertas de Chrome para malware ).
En pocas palabras, Krumo es un reemplazo para print_r () y var_dump (). Por definición, Krumo es una herramienta de depuración (inicialmente para PHP4 / PHP5, ahora solo para PHP5), que muestra información estructurada sobre cualquier variable de PHP.
Presione Ctrl + Shift + J (abre la consola), y puede encontrar allí la estructura JSON. Aún más útil para una bonita impresión de respuestas JSON, por supuesto.
No está mal en realidad. Probablemente hubiera sido votado más si hubiera mostrado un ejemplo de la salida.
Mawg dice que reinstalar a Monica el
@acSlater funciona para mí, solo necesitas crear la sbwDebugclase que olvidó publicar y poner la función en ella.
Dennis98
6
Recientemente desarrollé una extensión gratuita de Chrome (trabajo en progreso) para embellecer mis volcados var sin bibliotecas, sin etiquetas previas y sin instalación en todas y cada una de las aplicaciones. Todo hecho con JavaScript y regEx. Todo lo que tienes que hacer es instalar la extensión y listo. Estoy trabajando en una versión de Firefox también. Aquí está la página de GitHub. ¡Espero tenerlo disponible en las tiendas web de Chrome y Firefox pronto!
Esas elegantes bibliotecas son geniales ... excepto los gastos generales. Si quieres una var_dump simple y bonita que tome parámetros infinitos, prueba mi función. Agrega algo de HTML simple. Los atributos de datos también se agregan, si usa HTML5, las versiones inferiores simplemente los ignorarán, pero hacen que sea fácil abrir el elemento en la consola del navegador y obtener un poco más de información si lo que ve en la pantalla no es suficiente.
El diseño es muy simple, sin gastos generales. Proporciona una tonelada de información para cada parámetro, incluyendo cosas como gettypee incluso classnombres para volcados de objetos (incluido XML). Está probado y es cierto, lo he estado usando durante años.
Y si usa Codeigniter, agréguelo también a su CI EXTREMADAMENTE SIMPLEMENTE. Primero, ve application/config/autoload.phpy asegúrate de que helper'string'esté encendido.
$autoload['helper']= array('string');
Después, simplemente vaya a crear un archivo con el nombre MY_string_helper.phpde application/helpersy simple inserción de la función en una típica ifdeclaración de verificación de la existencia.
<?php if(!defined('BASEPATH'))exit('No direct script access allowed');if(!function_exists('preDump')){function preDump(){...}}// DON'T CLOSE PHP
| O |, si desea tomar una dirección diferente.
El siguiente fragmento es el mismo que el anterior, excepto que mostrará sus variables en la consola del navegador. Esto a veces puede facilitar la depuración de las llamadas a objetos sql y otras llamadas a objetos y matrices en las que falta el nombre de la clave o lo que sea.
function consoleDump(){// use string "noEcho" to just get a string return only
$args = func_get_args();
$doEcho = TRUE; $sb;if($args){
$sb ='<script type="text/javascript">console.log("<" + new Array('.(count($args)<10?'49':'48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';foreach(func_get_args()as $i => $arg){if(gettype($arg)=='string')if($arg =='noEcho'){ $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/','consoleDump: '.(count($args)-1), $sb);continue;}
$sb .='{ "type": "'.gettype($arg).'", ';switch(gettype($arg)){case"boolean":case"integer":case"string":
$sb .='"value": '.json_encode($arg);break;default:
$sb .='"value": '.json_encode($arg);if(is_object($arg)|| is_array($arg)) $sb .=', "count": '.json_encode(count((array)$arg));if(is_object($arg)) $sb .=', "objectClass": "'.get_class($arg).'"';}
$sb .='}';if($i < count($args)-1) $sb .=', ';}
$sb .=']); console.log("<" + new Array(120).join("-") + ">"); </script>';}else{
$sb ='<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';}if($doEcho) echo($sb);return $sb;}
Funciona con todo!
consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array('one'=>'bob','two'=>'bill'),(object)array('one'=>'bob','two'=>'bill'));<------------------------------------------------[consoleDump:6 items]------------------------------------------------->[Object,Object,Object,Object,Object,Object]// This drops down to show your variables in JS objects, like:0:Object
count:4
objectClass:"SimpleXMLElement"
type:"object"value:Object
__proto__:Object// ...etc...<----------------------------------------------------------------------------------------------------------------------->
¿Por qué debería preocuparse por la disminución insignificante del rendimiento en una herramienta de desarrollo? Esta función es, literalmente, echo '<pre>';var_dump($var);echo '</pre>';más un texto de valor cero.
raveren
@Raveren sí, excepto preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an echo 'pre'; var_dump` con algunos simple htmla su alrededor, no texto de valor agregado 0. jajaja kik Si no te gusta, no lo uses. Sólo una sugerencia.
SpYk3HH
@Raveren Y si te gustó eso ... realmente te encantará mi actualización: P
SpYk3HH
1
PHP Array Beautifier Esta herramienta simple toma una salida de matriz u objeto en PHP, como una declaración print_r () y la formatea en código de colores para leer fácilmente sus datos.
http://phillihp.com/toolz/php-array-beautifier/
Me gusta pensar que es bastante flexible. No apunta a un entorno de salida particular, pero tiene un montón de argumentos opcionales que puede especificar por qué cambiar la salida / impresión o el comportamiento, así como algunas configuraciones persistentes.
Básicamente, vuelca toda la matriz donde cada elemento está en una línea separada, lo que es beneficioso para encontrar las rutas completas correctas para ciertos elementos.
Me sorprende que nadie haya mencionado el código más fácil (aunque no muy bonito). Si solo desea obtener una salida legible (sin colores ni sangría), un simple <pre>entorno var_dumpfunciona, como en:
La demostración está rota, aunque el código está disponible en GitHub
Mawg dice que reinstale a Mónica el
0
Mi preferido es la depuración de https://github.com/hazardland/debug.php, que es una biblioteca que contiene solo una función llamada debug (puede copiar esa función en su proyecto o en su biblioteca) . La salida html debug () típica se ve así:
Pero puede generar datos como texto sin formato con la misma función también (con 4 pestañas con sangría de espacio) como esta (e incluso iniciar sesión en el archivo si es necesario):
string:"Test string"boolean:true
integer :17float:9.99
array (array)
bob :"alice"1:52:1.4object(test2)
another (test3)
string1 :"3d level"
string2 :"123"
complicated (test4)
enough :"Level 4"
Esta es una gran herramienta que está destinada a reemplazar la función PHP defectuosa var_dumpy print_r, ya que puede identificar correctamente los objetos referenciados recursivamente en una estructura de objeto compleja. También tiene un control de profundidad recursivo para evitar la visualización recursiva indefinida de algunas variables peculiares.
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. :)
Respuestas:
Un año completo de tiempo y trabajo después de preguntar esto, finalmente he abierto mi versión de var_dump, Kint. Lea sobre esto en la página del proyecto , o directamente en github .
Aquí hay una captura de pantalla:
Perdón por el enchufe :)
EDITAR: Me gustaría recordarles a los comentaristas que este no es un foro de soporte, si tiene problemas / desea una función, presente un problema . El soporte para solicitar comentarios se marcará para su eliminación.
fuente
Lo que prefiero es la
var_dump
función, como lo proporciona la extensión Xdebug : simplemente instale la extensión (fácil, tanto en Windows como en Linux) , yvar_dump
obtenga un mejor resultado:Y una captura de pantalla rápida:
Y, por supuesto, Xdebug trae muchas otras cosas útiles, como la depuración remota (es decir, la depuración gráfica de su aplicación PHP, en Eclipse PDT, por ejemplo) , perfiles, ...
fuente
Escribí el mío: REF ( demo ):
Los planes son agregar una representación de solo texto y mostrar información sobre la expresión de entrada como lo hace Kint ...
fuente
dll
, usaré esta "depuración". ¡Gracias y buen trabajo!Aquí está el mío, que uso en línea, muy útil:
fuente
function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}
. Var_dump es una función muy detallada, maneja todos los casos extremos de PHP (de los cuales hay MUCHOS) y es 100% estable, aunque no tan legible. Pero al final del día, si encuentra que su implementación es la mejor para usted, es lo que definitivamente debe usar.Está buscando Krumo ( Advertencia, alertas de Chrome para malware ).
fuente
Me encanta Firephp plus firebug
fuente
He estado usando dBug, que emula la increíble
cfdump
etiqueta de Coldfusion :http://dbug.ospinto.com/examples.php
fuente
Mi solución (parcial) para esto es simplemente agregar una función como esta (usando Google Chrome):
Presione Ctrl + Shift + J (abre la consola), y puede encontrar allí la estructura JSON. Aún más útil para una bonita impresión de respuestas JSON, por supuesto.
fuente
Un ejemplo completo de lo que uso ...
Salidas ...
fuente
Aquí esta el mio:
Diseñado con:
fuente
sbwDebug
clase que olvidó publicar y poner la función en ella.Recientemente desarrollé una extensión gratuita de Chrome (trabajo en progreso) para embellecer mis volcados var sin bibliotecas, sin etiquetas previas y sin instalación en todas y cada una de las aplicaciones. Todo hecho con JavaScript y regEx. Todo lo que tienes que hacer es instalar la extensión y listo. Estoy trabajando en una versión de Firefox también. Aquí está la página de GitHub. ¡Espero tenerlo disponible en las tiendas web de Chrome y Firefox pronto!
https://github.com/alexnaspo/var_dumpling
Aquí hay un ejemplo de salida:
fuente
Tracy tiene una hermosa salida plegable usando dump () la función .
fuente
Esas elegantes bibliotecas son geniales ... excepto los gastos generales. Si quieres una var_dump simple y bonita que tome parámetros infinitos, prueba mi función. Agrega algo de HTML simple. Los atributos de datos también se agregan, si usa HTML5, las versiones inferiores simplemente los ignorarán, pero hacen que sea fácil abrir el elemento en la consola del navegador y obtener un poco más de información si lo que ve en la pantalla no es suficiente.
El diseño es muy simple, sin gastos generales. Proporciona una tonelada de información para cada parámetro, incluyendo cosas como
gettype
e inclusoclass
nombres para volcados de objetos (incluido XML). Está probado y es cierto, lo he estado usando durante años.Y si usa Codeigniter, agréguelo también a su CI EXTREMADAMENTE SIMPLEMENTE. Primero, ve
application/config/autoload.php
y asegúrate de quehelper
'string'
esté encendido.Después, simplemente vaya a crear un archivo con el nombre
MY_string_helper.php
deapplication/helpers
y simple inserción de la función en una típicaif
declaración de verificación de la existencia.| O |, si desea tomar una dirección diferente.
El siguiente fragmento es el mismo que el anterior, excepto que mostrará sus variables en la consola del navegador. Esto a veces puede facilitar la depuración de las llamadas a objetos sql y otras llamadas a objetos y matrices en las que falta el nombre de la clave o lo que sea.
Funciona con todo!
fuente
echo '<pre>';var_dump($var);echo '</pre>';
más un texto de valor cero.preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an
echo 'pre'; var_dump` con algunossimple html
a su alrededor, no texto de valor agregado 0. jajaja kik Si no te gusta, no lo uses. Sólo una sugerencia.PHP Array Beautifier Esta herramienta simple toma una salida de matriz u objeto en PHP, como una declaración print_r () y la formatea en código de colores para leer fácilmente sus datos. http://phillihp.com/toolz/php-array-beautifier/
fuente
Otra versión local:
http://github.com/perchten/neat_html
Me gusta pensar que es bastante flexible. No apunta a un entorno de salida particular, pero tiene un montón de argumentos opcionales que puede especificar por qué cambiar la salida / impresión o el comportamiento, así como algunas configuraciones persistentes.
fuente
Aquí hay una extensión de Chrome que escribí para resolver este problema.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
fuente
Desarrollé una extensión de Chrome y un complemento de jquery para embellecer var_dumps
https://github.com/netfox01/fleX-debug
fuente
Si se trata de matrices muy grandes en PHP, esta función puede ayudar:
Básicamente, vuelca toda la matriz donde cada elemento está en una línea separada, lo que es beneficioso para encontrar las rutas completas correctas para ciertos elementos.
Salida de ejemplo:
Ver: ¿Cómo exportar una matriz PHP donde cada par clave-valor está en una línea separada?
fuente
Me sorprende que nadie haya mencionado el código más fácil (aunque no muy bonito). Si solo desea obtener una salida legible (sin colores ni sangría), un simple
<pre>
entornovar_dump
funciona, como en:¡No se puede obtener gastos generales mucho más bajos que esto!
fuente
Escribí una clase pequeña que es similar a Krumo, pero mucho más fácil de insertar en la aplicación.
Aquí está el enlace: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
Y aquí salida de muestra: http://langpavel.php5.cz/debug_sample.html
fuente
Mi preferido es la depuración de https://github.com/hazardland/debug.php, que es una biblioteca que contiene solo una función llamada debug (puede copiar esa función en su proyecto o en su biblioteca) . La salida html debug () típica se ve así:
Pero puede generar datos como texto sin formato con la misma función también (con 4 pestañas con sangría de espacio) como esta (e incluso iniciar sesión en el archivo si es necesario):
fuente
TVarDumper
Esta es una gran herramienta que está destinada a reemplazar la función PHP defectuosa
var_dump
yprint_r
, ya que puede identificar correctamente los objetos referenciados recursivamente en una estructura de objeto compleja. También tiene un control de profundidad recursivo para evitar la visualización recursiva indefinida de algunas variables peculiares.Ver:
TVarDumper.php
.Para otras soluciones alternativas que brindan más ventajas sobre
var_dump
yprint_r
pueden admitir referencias circulares, consulte: Uso de print_r y var_dump con referencia circular .Para obtener más ideas, consulte también: ¿Cómo se depuran los scripts PHP?
fuente
La mía, es más simple, para mí no tengo mucho conocimiento / tiempo para cambiar la infraestructura, instalar xdebug, etc.
Y en otros casos, bueno, no necesitas mucho para un simple sitio web de WP, por ejemplo
Entonces uso:
eso realmente me ayuda mucho.
pero debido a que prefiero el entorno DevConsole, uso esta increíble pero simple función:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Pequeño ajuste:
fuente
Otra opción es
Luego, en su archivo, simplemente usa
dump($var)
y terminará con una salida como estafuente
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:
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. :)
fuente