Une alternative Var_dump plus jolie / informative en PHP? [fermé]
130
Chaque programmeur PHP décent a un print_rou un var_dumpwrapper qu'il utilise, aime et attribue des touches de raccourci, pourquoi ne partageons- nous pas nos préférés .
j'utilise juste echo '<pre>'; print_r ($ var); exit; je ne le ferme même pas. Je suppose que je ne suis pas décent
Funky Dude
J'ai édité le lien pour qu'il pointe vers github, où je continue le développement de Kint, et si vous avez encore des problèmes avec celui-ci, veuillez me le faire savoir par tous les moyens.
raveren
1
Hé, Kint est cool! Cela m'a sauvé la journée.
István Ujj-Mészáros
2
Pourquoi une question qui est à 100% un avis publicitaire d'un programme est en cours dans une version "je fais ma propre var_dump ()" ?? La première question serait de savoir pourquoi la publicité d'un produit est autorisée comme question.
m3nda
11
Parce que j'ai fait l'outil plus d'un an plus tard après avoir posé la question. Je ne sais pas ce qui vous dérange, j'ai créé un outil open source mature de plus de 10 000 lignes et je l'améliore constamment des années plus tard. J'ai fourni ma propre réponse à la question - comme le veut la tradition en SO.
raveren
Réponses:
71
Une année complète de temps et de travail après avoir posé cette question, j'ai enfin ouvert ma version de var_dump, Kint. Renseignez-vous sur la page du projet ou directement dans github .
Voici une capture d'écran:
Désolé pour la prise :)
EDIT: Je voudrais juste rappeler aux commentateurs, que ce n'est pas un forum de support, si vous rencontrez des problèmes / souhaitez une fonctionnalité, veuillez déposer un problème . Le support demandant des commentaires sera signalé pour suppression.
J'ai dû changer la taille de la police et embellir le code CSS, mais bon travail, j'aime ça ... venant d'un utilisateur de longue date de Krumo
Quamis
1
quels changements avez-vous fait, si vous pensez que c'est une amélioration, vous pouvez m'envoyer les changements à [email protected]
raveren
J'étais habitué à Krumo et je voulais des polices plus petites, et j'ai également embelli le code CSS. Rien qui puisse être appelé une amélioration réelle, plus comme une vieille habitude :)
Quamis
eh bien, l'idée était que le css est censé être compressé avec le js afin d'interférer le moins possible avec la sortie réelle. Bien sûr, une jolie indentation de la source générée était également prévue, mais je n'ai actuellement pas de temps à consacrer à Kint ..
raveren
2
À titre d'exemple, Kint montre des variables protégées et privées si vous videz un objet, pas krumo (car seul le premier utilise des classes de réflexion que je suppose). D'une manière générale, j'ai trouvé que Kint était supérieur; même si j'ai également dû modifier le css pour le rendre plus utilisable (cette énorme police ne fonctionne pas très bien lors du dumping de tonnes de propriétés imbriquées). Oh et le code derrière ce n'est pas un gâchis, quelque chose qui ne peut pas dire de Krumo (désolé auteur Krumo!)
Mahn
45
Mon préféré est la var_dumpfonction, fournie par l'extension Xdebug : il suffit d'installer l'extension (facile, à la fois sous Windows et Linux) , et var_dumpobtenir un meilleur résultat:
meilleure mise en forme
HTML
couleurs
et vous avez des options pour régler la quantité d'informations à afficher
Et une capture d'écran rapide:
Et, bien sûr, Xdebug apporte plein d'autres trucs utiles, comme le débogage à distance (c'est-à-dire le débogage graphique de votre application PHP, dans Eclipse PDT par exemple) , le profilage, ...
J'ai besoin d'utiliser cette classe de formatage xdebug dans un hôte partagé. Est-il possible de l'inclure dans mon projet personnel?
Anyul Rivas
1
Si vous n'êtes pas administrateur (root) de votre serveur, vous ne pourrez probablement pas installer d'extension PHP (je n'ai jamais vu un service d'hébergement partagé qui en installerait un pour installer des extensions PHP) ; donc non, vous ne pourrez pas utiliser Xdebug (de toute façon, l'installer sur un serveur de production n'est généralement pas une bonne idée: c'est une extension de débogage, après tout) ; vous devrez revenir à une implémentation basée sur PHP d'une fonction de sortie de variable (voir quelques autres réponses)
Pascal MARTIN
1
oui, j'avais juste besoin de la classe pour m'envoyer une sortie lorsqu'une erreur se produit.
J'adore cette fonction - facile et claire et ai-je mentionné très facile :)
derekdreery
Merci. Je l'utilise tout le temps. Devrait vraiment être intégré à PHP. Vous pouvez mettre votre propre formatage en utilisant le deuxième paramètre. par exemple echo $ pretty ($ some_variable, "-");
Guillermo Phillips
7
Cela combine magnifiquement toutes les pires fonctionnalités de print_r, var_dump et var_export. Aucun échappement html, n'accepte qu'un seul paramètre, se bloque lors de la récursivité, ne peut pas renvoyer la sortie et, pour couronner le tout, c'est totalement illisible . Je ne veux pas être un connard, mais les commentaires le font paraître si parfait.
raveren
Merci pour votre commentaire @Raveren. Si vous pouviez être plus précis, j'améliorerai ma réponse.
Guillermo Phillips
2
IMO, la meilleure solution de ligne unique est tout simplement 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 est une fonction très verbeuse, elle gère tous les cas de pointe PHP (dont il y a BEAUCOUP) et est 100% stable, même si elle n'est pas très lisible. Mais en fin de compte, si vous trouvez que votre implémentation est la meilleure pour vous, c'est ce que vous devez absolument utiliser.
raveren
16
Vous recherchez Krumo ( Attention, alertes Chrome pour Malware ).
Pour faire simple, Krumo remplace print_r () et var_dump (). Par définition, Krumo est un outil de débogage (initialement pour PHP4 / PHP5, maintenant pour PHP5 uniquement), qui affiche des informations structurées sur n'importe quelle variable PHP.
Appuyez sur Ctrl + Maj + J (ouvre la console), et vous pouvez y trouver la structure JSON. Encore plus utile pour une jolie impression des réponses JSON bien sûr.
Pas mal en fait. Aurait probablement été voté plus haut si vous aviez montré un exemple du résultat.
Mawg dit de réintégrer Monica le
@acSlater Fonctionne pour moi, il vous suffit de créer la sbwDebugclasse qu'il a oublié de publier et d'y mettre la fonction.
Dennis98 le
6
J'ai récemment développé une extension chrome gratuite (travail en cours) afin d'embellir mes vidages var sans bibliothèques, sans balises pré et sans installation sur chaque application. Tout est fait avec JavaScript et regEx. Tout ce que vous avez à faire est d'installer l'extension et vous êtes prêt à partir. Je travaille également sur une version de Firefox. Voici la page GitHub. J'espère l'avoir bientôt disponible sur les boutiques en ligne Chrome et Firefox!
Ces bibliothèques sophistiquées sont super ... sauf les frais généraux. Si vous voulez un simple et joli var_dump qui prend des paramètres infinis, essayez ma fonction. Il ajoute du HTML simple. Les attributs de données sont également ajoutés.Si vous utilisez HTML5, les versions inférieures les ignoreront simplement, mais faciliteront l'ouverture de l'élément dans la console du navigateur et obtiendront un peu plus d'informations si ce que vous voyez à l'écran ne suffit pas.
La mise en page est très simple, sans frais généraux. Fournit une tonne d'informations pour chaque paramètre, y compris des choses comme gettypeet mêmeclass nom des vidages d'objets (y compris XML). C'est essayé et vrai, je l'utilise depuis des années.
Et si vous utilisez Codeigniter, ajoutez-le aussi à votre CI EXTRÊMEMENT SIMPLEMENT. Tout d'abord, allez à application/config/autoload.phpet assurez-vous que lehelper'string' est activé.
$autoload['helper']= array('string');
Ensuite, créez simplement un fichier nommé MY_string_helper.phpdans application/helperset insérez simplement la fonction dans une ifdéclaration typique de vérification d'existence.
<?php if(!defined('BASEPATH'))exit('No direct script access allowed');if(!function_exists('preDump')){function preDump(){...}}// DON'T CLOSE PHP
| OU |, si vous voulez prendre une autre direction.
L'extrait suivant est le même que ci-dessus, sauf qu'il affichera vos variables dans la console du navigateur. Cela peut parfois faciliter le débogage des appels d'objet SQL et d'autres appels de tableau et d'objet où vous manquez le nom de la clé ou autre.
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;}
Fonctionne avec tout!
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...<----------------------------------------------------------------------------------------------------------------------->
Pourquoi s'inquiéter des baisses de performances négligeables dans un outil de développement? Cette fonction est littéralement echo '<pre>';var_dump($var);echo '</pre>';plus du texte à valeur nulle.
raveren
@Raveren oui sauf 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` avec un peu simple htmlautour, pas de texte à valeur 0. lol kik. Si vous ne l'aimez pas, ne l'utilisez pas. Juste une suggestion.
SpYk3HH
@Raveren Et si vous avez aimé ça ... vous allez vraiment adorer ma mise à jour: P
SpYk3HH
1
PHP Array Beautifier Cet outil simple prend un tableau ou une sortie d'objet en PHP, comme une instruction print_r () et le formate en code couleur pour lire facilement vos données.
http://phillihp.com/toolz/php-array-beautifier/
J'aime penser que c'est assez flexible. Il ne vise pas un environnement de sortie particulier mais a un tas d'arguments optionnels vous pouvez spécifier pourquoi changer la sortie / impression ou le comportement, ainsi que certains paramètres persistants.
Il vide essentiellement tout le tableau où chaque élément est sur une ligne distincte, ce qui est bénéfique pour trouver les bons chemins complets pour certains éléments.
Je suis surpris que personne n'ait mentionné le code le plus simple (mais pas très joli). Si vous voulez juste obtenir une sortie lisible (sans couleurs ni indentation), un simple <pre>autour d'une var_dumpœuvre, comme dans:
La démo est cassée, bien que le code soit disponible sur GitHub
Mawg dit de réintégrer Monica le
0
Mon préféré est le débogage de https://github.com/hazardland/debug.php qui est une bibliothèque contenant une seule fonction nommée débogage (vous pouvez simplement copier cette fonction dans votre projet ou dans votre bibliothèque) . La sortie html typique de debug () ressemble à ceci:
Mais vous pouvez également générer des données sous forme de texte brut avec la même fonction (avec 4 tabulations en retrait d'espacement) comme ceci (et même les enregistrer dans un fichier si nécessaire):
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"
C'est un excellent outil destiné à remplacer la fonction PHP boguée var_dumpetprint_r , puisqu'il peut identifier correctement les objets référencés récursivement dans une structure d'objets complexe. Il dispose également d'un contrôle de profondeur récursif pour éviter l'affichage récursif indéfini de certaines variables particulières.
Pour d' autres solutions alternatives qui offre plus d' avantages sur var_dumpet print_ret peut supporter des références circulaires, s'il vous plaît vérifier: Utiliser print_r et var_dump en référence circulaire .
J'ai dû ajouter une autre réponse ici car je ne voulais pas vraiment passer par les étapes des autres solutions. C'est extrêmement simple et ne nécessite aucune extension, inclut, etc. et c'est ce que je préfère. C'est très simple et très rapide.
Tout d'abord, json_encode la variable en question:
echo json_encode($theResult);
Copiez le résultat que vous obtenez dans l'éditeur JSON à http://jsoneditoronline.org/, copiez-le simplement dans le volet de gauche, cliquez sur Copier> et il imprime assez le JSON dans un très joli format d'arbre.
À chacun le leur, mais j'espère que cela aidera certains autres à avoir une autre option intéressante! :)
Réponses:
Une année complète de temps et de travail après avoir posé cette question, j'ai enfin ouvert ma version de var_dump, Kint. Renseignez-vous sur la page du projet ou directement dans github .
Voici une capture d'écran:
Désolé pour la prise :)
EDIT: Je voudrais juste rappeler aux commentateurs, que ce n'est pas un forum de support, si vous rencontrez des problèmes / souhaitez une fonctionnalité, veuillez déposer un problème . Le support demandant des commentaires sera signalé pour suppression.
la source
Mon préféré est la
var_dump
fonction, fournie par l'extension Xdebug : il suffit d'installer l'extension (facile, à la fois sous Windows et Linux) , etvar_dump
obtenir un meilleur résultat:Et une capture d'écran rapide:
Et, bien sûr, Xdebug apporte plein d'autres trucs utiles, comme le débogage à distance (c'est-à-dire le débogage graphique de votre application PHP, dans Eclipse PDT par exemple) , le profilage, ...
la source
J'ai écrit le mien: REF ( démo ):
Les plans sont d'ajouter un rendu de texte uniquement et d'afficher des informations sur l'expression d'entrée comme le fait Kint ...
la source
dll
, j'utiliserai ce "débogage". Merci et bon travail!Voici le mien, que j'utilise en ligne, très utile:
la source
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 est une fonction très verbeuse, elle gère tous les cas de pointe PHP (dont il y a BEAUCOUP) et est 100% stable, même si elle n'est pas très lisible. Mais en fin de compte, si vous trouvez que votre implémentation est la meilleure pour vous, c'est ce que vous devez absolument utiliser.Vous recherchez Krumo ( Attention, alertes Chrome pour Malware ).
la source
J'adore Firephp plus Firebug
la source
J'utilise dBug, qui émule le génial
cfdump
tag de Coldfusion :http://dbug.ospinto.com/examples.php
la source
Ma solution (partielle) pour cela est d'ajouter simplement une fonction comme celle-ci (en utilisant Google Chrome):
Appuyez sur Ctrl + Maj + J (ouvre la console), et vous pouvez y trouver la structure JSON. Encore plus utile pour une jolie impression des réponses JSON bien sûr.
la source
Un exemple complet de ce que j'utilise ...
Les sorties ...
la source
Voici le mien:
Conçu avec:
la source
sbwDebug
classe qu'il a oublié de publier et d'y mettre la fonction.J'ai récemment développé une extension chrome gratuite (travail en cours) afin d'embellir mes vidages var sans bibliothèques, sans balises pré et sans installation sur chaque application. Tout est fait avec JavaScript et regEx. Tout ce que vous avez à faire est d'installer l'extension et vous êtes prêt à partir. Je travaille également sur une version de Firefox. Voici la page GitHub. J'espère l'avoir bientôt disponible sur les boutiques en ligne Chrome et Firefox!
https://github.com/alexnaspo/var_dumpling
Voici un exemple de sortie:
la source
Tracy a une belle sortie à l' aide collapsable dump () fonction .
la source
Ces bibliothèques sophistiquées sont super ... sauf les frais généraux. Si vous voulez un simple et joli var_dump qui prend des paramètres infinis, essayez ma fonction. Il ajoute du HTML simple. Les attributs de données sont également ajoutés.Si vous utilisez HTML5, les versions inférieures les ignoreront simplement, mais faciliteront l'ouverture de l'élément dans la console du navigateur et obtiendront un peu plus d'informations si ce que vous voyez à l'écran ne suffit pas.
La mise en page est très simple, sans frais généraux. Fournit une tonne d'informations pour chaque paramètre, y compris des choses comme
gettype
et mêmeclass
nom des vidages d'objets (y compris XML). C'est essayé et vrai, je l'utilise depuis des années.Et si vous utilisez Codeigniter, ajoutez-le aussi à votre CI EXTRÊMEMENT SIMPLEMENT. Tout d'abord, allez à
application/config/autoload.php
et assurez-vous que lehelper
'string'
est activé.Ensuite, créez simplement un fichier nommé
MY_string_helper.php
dansapplication/helpers
et insérez simplement la fonction dans uneif
déclaration typique de vérification d'existence.| OU |, si vous voulez prendre une autre direction.
L'extrait suivant est le même que ci-dessus, sauf qu'il affichera vos variables dans la console du navigateur. Cela peut parfois faciliter le débogage des appels d'objet SQL et d'autres appels de tableau et d'objet où vous manquez le nom de la clé ou autre.
Fonctionne avec tout!
la source
echo '<pre>';var_dump($var);echo '</pre>';
plus du texte à valeur nulle.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` avec un peusimple html
autour, pas de texte à valeur 0. lol kik. Si vous ne l'aimez pas, ne l'utilisez pas. Juste une suggestion.PHP Array Beautifier Cet outil simple prend un tableau ou une sortie d'objet en PHP, comme une instruction print_r () et le formate en code couleur pour lire facilement vos données. http://phillihp.com/toolz/php-array-beautifier/
la source
Encore une autre version locale:
http://github.com/perchten/neat_html
J'aime penser que c'est assez flexible. Il ne vise pas un environnement de sortie particulier mais a un tas d'arguments optionnels vous pouvez spécifier pourquoi changer la sortie / impression ou le comportement, ainsi que certains paramètres persistants.
la source
Voici une extension chrome que j'ai écrite pour résoudre ce problème.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
la source
J'ai développé une extension chrome et un plugin jquery afin d'embellir var_dumps
https://github.com/netfox01/fleX-debug
la source
Si vous avez affaire à de très gros tableaux en PHP, cette fonction peut vous aider:
Il vide essentiellement tout le tableau où chaque élément est sur une ligne distincte, ce qui est bénéfique pour trouver les bons chemins complets pour certains éléments.
Exemple de sortie:
Voir: Comment exporter un tableau PHP où chaque paire clé-valeur est sur une ligne distincte?
la source
Je suis surpris que personne n'ait mentionné le code le plus simple (mais pas très joli). Si vous voulez juste obtenir une sortie lisible (sans couleurs ni indentation), un simple
<pre>
autour d'unevar_dump
œuvre, comme dans:Vous ne pouvez pas obtenir des frais généraux beaucoup plus bas!
la source
J'ai écrit une petite classe similaire à Krumo, mais beaucoup plus facile à intégrer à l'application.
Voici le lien: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
Et voici un exemple de sortie: http://langpavel.php5.cz/debug_sample.html
la source
Mon préféré est le débogage de https://github.com/hazardland/debug.php qui est une bibliothèque contenant une seule fonction nommée débogage (vous pouvez simplement copier cette fonction dans votre projet ou dans votre bibliothèque) . La sortie html typique de debug () ressemble à ceci:
Mais vous pouvez également générer des données sous forme de texte brut avec la même fonction (avec 4 tabulations en retrait d'espacement) comme ceci (et même les enregistrer dans un fichier si nécessaire):
la source
TVarDumper
C'est un excellent outil destiné à remplacer la fonction PHP boguée
var_dump
etprint_r
, puisqu'il peut identifier correctement les objets référencés récursivement dans une structure d'objets complexe. Il dispose également d'un contrôle de profondeur récursif pour éviter l'affichage récursif indéfini de certaines variables particulières.Voir:
TVarDumper.php
.Pour d' autres solutions alternatives qui offre plus d' avantages sur
var_dump
etprint_r
et peut supporter des références circulaires, s'il vous plaît vérifier: Utiliser print_r et var_dump en référence circulaire .Pour plus d'idées, consultez également: Comment déboguez-vous les scripts PHP?
la source
Le mien, c'est un plus simple, pour moi je n'ai pas beaucoup de connaissances / de temps pour changer d'infrastructure installer xdebug, etc etc.
Et dans d'autres cas, eh bien vous n'avez pas besoin de grand chose pour un simple site Web WP par exemple
J'utilise donc:
cela m'aide vraiment beaucoup.
mais parce que je préfère l'environnement DevConsole, j'utilise cette fonction géniale mais simple:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Petit tweak:
la source
Une autre option consiste à
Ensuite, dans votre fichier, vous utilisez simplement
dump($var)
et vous vous retrouverez avec une sortie comme celle-cila source
J'ai dû ajouter une autre réponse ici car je ne voulais pas vraiment passer par les étapes des autres solutions. C'est extrêmement simple et ne nécessite aucune extension, inclut, etc. et c'est ce que je préfère. C'est très simple et très rapide.
Tout d'abord, json_encode la variable en question:
Copiez le résultat que vous obtenez dans l'éditeur JSON à http://jsoneditoronline.org/, copiez-le simplement dans le volet de gauche, cliquez sur Copier> et il imprime assez le JSON dans un très joli format d'arbre.
À chacun le leur, mais j'espère que cela aidera certains autres à avoir une autre option intéressante! :)
la source