Uma alternativa Var_dump mais bonita / informativa em PHP? [fechadas]
130
Todo programador decente de PHP tem print_rou var_dumpinvólucro que usa, ama e atribui teclas de atalho, por que não compartilhamos as nossas favoritas ?
Eu apenas uso echo '<pre>'; print_r ($ var); exit; eu nem fechá-lo. Eu acho que não sou digno
Funky do Cara
Editei o link para apontar para o github, onde continuo o desenvolvimento do Kint e, se você ainda tiver algum problema, informe-me por qualquer meio.
raveren
1
Ei, Kint é legal! Apenas salvou o meu dia.
István Ujj-Mészáros
2
Por que uma pergunta que é 100% é um aviso de publicidade de um programa em uma versão "eu faço minha própria var_dump ()"? A primeira pergunta seria por que uma publicidade de produto é permitida como pergunta.
M3nda
11
Porque eu fiz a ferramenta mais de um ano depois, depois de fazer a pergunta. Não sei o que está incomodando, criei uma ferramenta de código aberto madura de 10k + linhas e a estou aprimorando constantemente anos depois. Forneci minha própria resposta na pergunta - como é tradição no SO.
raveren 19/11
Respostas:
70
Um ano inteiro de tempo e trabalho depois de perguntar isso, finalmente abri minha versão do var_dump, Kint. Leia sobre isso na página do projeto ou diretamente no github .
Aqui está uma captura de tela:
Desculpe pelo plugue :)
EDIT: Gostaria de lembrar aos comentaristas que este não é um fórum de suporte. Se você está com problemas / deseja um recurso, registre um problema . O suporte para solicitar comentários será sinalizado para exclusão.
Eu tive que mudar o tamanho da fonte, e embelezar o código CSS, mas bom trabalho, eu gosto ... vindo de um longo tempo Krumo usuário
Quamis
1
quais as mudanças que você fez, se você acreditar que é uma melhoria, você pode me enviar as alterações [email protected]
raveren
Eu estava acostumado com o Krumo e queria fontes menores, além de embelezar o código CSS. Nada que possa ser chamado de uma melhoria real, mais como um velho hábito :)
Quamis
bem, a idéia era que o css deveria ser compactado junto com o js para interferir o mínimo possível com a saída real. Claro, muito recuo da fonte gerado foi planejado também, mas eu atualmente não têm tempo para se dedicar a Kint ..
raveren
2
Apenas como exemplo, o Kint mostra variáveis protegidas e privadas se você despejar um objeto, o krumo não (porque apenas o primeiro usa classes de reflexão que eu assumo). De um modo geral, achei Kint superior; embora eu também tenha que ajustar o css para torná-lo mais utilizável (essa fonte enorme não funciona muito bem ao despejar toneladas de propriedades aninhadas). Oh eo código por trás não é uma confusão, algo que não pode dizer de Krumo (desculpe Krumo autor!)
Mahn
45
Meu preferido é a var_dumpfunção, conforme fornecida pela extensão Xdebug : basta instalar a extensão (fácil, tanto no Windows quanto no Linux) , e var_dumpobtém uma saída melhor:
melhor formatação
HTML
cores
e você tem opções para ajustar quantas informações devem ser exibidas
E uma captura de tela rápida:
E, é claro, o Xdebug traz muitas outras coisas úteis, como depuração remota (ou seja, depuração gráfica do seu aplicativo PHP, no Eclipse PDT por exemplo) , criação de perfil, ...
Eu preciso usar essa classe de formatação xdebug em um host compartilhado. Existe alguma maneira de incluí-lo no meu projeto pessoal?
Anyul Rivas
1
Se você não é administrador (raiz) do seu servidor, provavelmente não poderá instalar uma extensão PHP (nunca vi um serviço de hospedagem compartilhada que instalasse um para instalar extensões PHP) ; portanto, não, você não poderá usar o Xdebug (de qualquer forma, instalá-lo em um servidor de produção geralmente não é uma boa idéia: afinal, é uma extensão de depuração) ; você terá que recorrer a uma implementação baseada em PHP de uma função de saída variável (veja algumas outras respostas)
Pascal MARTIN
1
Sim, eu só precisava da classe para me enviar alguma saída quando ocorrer um erro.
Amo essa função - fácil e clara e eu fiz menção muito fácil :)
derekdreery
Obrigado. Eu uso isso o tempo todo. Deveria ser embutido no PHP realmente. Você pode colocar sua própria formatação, usando o segundo parâmetro. por exemplo, echo $ pretty ($ some_variable, "-");
Guillermo Phillips
7
Isso combina lindamente todos os piores recursos de print_r, var_dump e var_export. Nenhum escape de html, aceita apenas um parâmetro, trava na recursão, não pode retornar a saída e, ainda por cima, é totalmente ilegível . Eu não quero ser um idiota, mas os comentários fazem parecer tão perfeito.
raveren
Obrigado pelo seu comentário @Raveren. Se você puder ser mais específico, melhorarei minha resposta.
Guillermo Phillips
2
A IMO, a melhor solução de linha única, é simples 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 é uma função muito detalhada, ele lida com todos os casos de borda do PHP (dos quais existem MUITOS) e é 100% estável, mesmo que não seja tão legível. Mas, no final das contas, se você acha que sua implementação é melhor para você, é isso que você definitivamente deve usar.
raveren
16
Você está procurando o Krumo ( aviso, alertas do Chrome para malware ).
Simplificando, o Krumo é um substituto para print_r () e var_dump (). Por definição, o Krumo é uma ferramenta de depuração (inicialmente para PHP4 / PHP5, agora apenas para PHP5), que exibe informações estruturadas sobre qualquer variável PHP.
Pressione Ctrl + Shift + J (abre o console) e você poderá encontrar a estrutura JSON. Ainda mais útil para uma boa impressão das respostas JSON, é claro.
Nada mal, na verdade. Provavelmente teria sido votado mais se você tivesse mostrado um exemplo da saída.
Mawg diz restabelecer Monica 6/06/11
@acSlater Funciona para mim, você só precisa criar a sbwDebugclasse que ele esqueceu de postar e colocar a função nela.
precisa saber é o seguinte
6
Recentemente, desenvolvi uma extensão gratuita do Chrome (trabalho em andamento) para embelezar meus var dumps sem bibliotecas, sem pré tags e sem instalação em todos os aplicativos. Tudo feito com JavaScript e regEx. Tudo o que você precisa fazer é instalar a extensão e pronto. Também estou trabalhando em uma versão do Firefox. Aqui está a página do GitHub. Espero tê-lo disponível nas lojas virtuais chrome e firefox em breve!
Essas bibliotecas sofisticadas são ótimas ... exceto as despesas gerais. Se você quer um var_dump simples e bonito que usa parâmetros infinitos, tente minha função. Ele adiciona um pouco de HTML simples. Também são adicionados atributos de dados. Se você usa HTML5, as versões inferiores os ignoram, mas facilita a abertura do elemento no console do navegador e a obtenção de mais informações se o que você vê na tela não for suficiente.
O layout é muito simples, sem custos adicionais. Fornece uma tonelada de informações para cada parâmetro, incluindo coisas como gettypee mesmo classnome para despejos de objetos (incluindo XML). É tentado e verdadeiro, eu tenho usado por anos.
E se você usa o Codeigniter, adicione-o também ao seu CI EXTREMAMENTE SIMPLESMENTE. Primeiro, vá application/config/autoload.phpe verifique se helper'string'está ligado.
$autoload['helper']= array('string');
Em seguida, basta ir criar um arquivo nomeado MY_string_helper.phpem application/helperssimples e inserir a função em um típicoif declaração para o check existência.
<?php if(!defined('BASEPATH'))exit('No direct script access allowed');if(!function_exists('preDump')){function preDump(){...}}// DON'T CLOSE PHP
| OU |, se você quiser tomar uma direção diferente.
O seguinte snippet é o mesmo que acima, exceto que mostrará suas variáveis no console do navegador. Às vezes, isso pode facilitar a depuração de chamadas de objeto sql e outras chamadas de matriz e objeto em que você está perdendo o nome da chave ou o que for.
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 com tudo!
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 que alguém deveria se preocupar com a diminuição insignificante de desempenho em uma ferramenta de desenvolvimento? Esta função é literalmente echo '<pre>';var_dump($var);echo '</pre>';mais algum texto com valor zero.
raveren
@Raveren sim, exceto 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` com alguns simple htmlao seu redor, não texto com valor agregado. lol kik. Se você não gostar, não use. Apenas uma sugestão.
SpYk3HH
@Raveren E se você gostou disso ... você realmente amará minha atualização: P
SpYk3HH
1
Embelezador de matriz PHP Esta ferramenta simples pega uma matriz ou objeto de saída em PHP, como uma instrução print_r (), e formata-a em código de cores para ler facilmente seus dados.
http://phillihp.com/toolz/php-array-beautifier/
Eu gosto de pensar que é bastante flexível. Ele não visa um ambiente de saída específico, mas possui vários argumentos opcionais que você pode especificar por que alterar a saída / impressão ou comportamento, além de algumas configurações persistentes.
Basicamente, despeja toda a matriz onde cada elemento está em uma linha separada, o que é benéfico para encontrar os caminhos completos certos para certos elementos.
Estou surpreso que ninguém tenha mencionado o código mais fácil (embora não muito bonito). Se você deseja apenas obter uma saída legível (sem cores ou recuo), é simples <pre>um var_dumptrabalho simples , como em:
A demonstração está com defeito, embora o código esteja disponível no GitHub
Mawg diz que restabelece Monica em
0
O meu preferido é depurar em https://github.com/hazardland/debug.php, que é uma biblioteca que contém apenas uma única função chamada debug (você pode copiar essa função no seu projeto ou na sua biblioteca) . A saída html típica de debug () se parece com isso:
Mas você pode enviar dados como um texto sem formatação com a mesma função também (com quatro guias com recuo de espaço) como este (e até registrá-los em arquivo, se necessário):
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 é uma ótima ferramenta que se destina a substituir a função PHP com bugs var_dumpeprint_r , uma vez que pode identificar corretamente os objetos referenciados recursivamente em uma estrutura complexa de objetos. Ele também possui um controle de profundidade recursivo para evitar a exibição recursiva indefinida de algumas variáveis peculiares.
Por outras soluções alternativas que oferece mais vantagens em relação a var_dumpe print_re pode suportar referências circulares, por favor consulte: Usando print_r e var_dump com referência circular .
Eu tive que adicionar outra resposta aqui, porque eu realmente não queria seguir as etapas das outras soluções. É extremamente simples e não requer extensões, inclui etc e é o que eu prefiro. É muito fácil e muito rápido.
Primeiro, basta json_encode a variável em questão:
echo json_encode($theResult);
Copie o resultado obtido no JSON Editor em http://jsoneditoronline.org/, basta copiá-lo no painel esquerdo, clique em Copiar> e ele imprimirá o JSON em um formato de árvore muito bom.
Para cada um deles, mas espero que isso ajude outros a terem mais uma boa opção! :)
Respostas:
Um ano inteiro de tempo e trabalho depois de perguntar isso, finalmente abri minha versão do var_dump, Kint. Leia sobre isso na página do projeto ou diretamente no github .
Aqui está uma captura de tela:
Desculpe pelo plugue :)
EDIT: Gostaria de lembrar aos comentaristas que este não é um fórum de suporte. Se você está com problemas / deseja um recurso, registre um problema . O suporte para solicitar comentários será sinalizado para exclusão.
fonte
Meu preferido é a
var_dump
função, conforme fornecida pela extensão Xdebug : basta instalar a extensão (fácil, tanto no Windows quanto no Linux) , evar_dump
obtém uma saída melhor:E uma captura de tela rápida:
E, é claro, o Xdebug traz muitas outras coisas úteis, como depuração remota (ou seja, depuração gráfica do seu aplicativo PHP, no Eclipse PDT por exemplo) , criação de perfil, ...
fonte
Eu escrevi o meu próprio: REF ( demo ):
Os planos são adicionar renderização somente texto e exibir informações sobre a expressão de entrada, como o Kint ...
fonte
dll
, usarei este "debug". Obrigado e bom trabalho!Aqui está o meu, que eu uso em linha, muito útil:
fonte
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 é uma função muito detalhada, ele lida com todos os casos de borda do PHP (dos quais existem MUITOS) e é 100% estável, mesmo que não seja tão legível. Mas, no final das contas, se você acha que sua implementação é melhor para você, é isso que você definitivamente deve usar.Você está procurando o Krumo ( aviso, alertas do Chrome para malware ).
fonte
Eu amo Firephp mais firebug
fonte
Estou usando o dBug, que emula a incrível
cfdump
tag do Coldfusion :http://dbug.ospinto.com/examples.php
fonte
Minha solução (parcial) para isso é simplesmente adicionar uma função como esta (usando o Google Chrome):
Pressione Ctrl + Shift + J (abre o console) e você poderá encontrar a estrutura JSON. Ainda mais útil para uma boa impressão das respostas JSON, é claro.
fonte
Um exemplo completo do que eu uso ...
Saídas ...
fonte
Aqui é minha:
Estilo:
fonte
sbwDebug
classe que ele esqueceu de postar e colocar a função nela.Recentemente, desenvolvi uma extensão gratuita do Chrome (trabalho em andamento) para embelezar meus var dumps sem bibliotecas, sem pré tags e sem instalação em todos os aplicativos. Tudo feito com JavaScript e regEx. Tudo o que você precisa fazer é instalar a extensão e pronto. Também estou trabalhando em uma versão do Firefox. Aqui está a página do GitHub. Espero tê-lo disponível nas lojas virtuais chrome e firefox em breve!
https://github.com/alexnaspo/var_dumpling
Aqui está um exemplo de saída:
fonte
Tracy tem uma bela saída recolhível usando a função dump () .
fonte
Essas bibliotecas sofisticadas são ótimas ... exceto as despesas gerais. Se você quer um var_dump simples e bonito que usa parâmetros infinitos, tente minha função. Ele adiciona um pouco de HTML simples. Também são adicionados atributos de dados. Se você usa HTML5, as versões inferiores os ignoram, mas facilita a abertura do elemento no console do navegador e a obtenção de mais informações se o que você vê na tela não for suficiente.
O layout é muito simples, sem custos adicionais. Fornece uma tonelada de informações para cada parâmetro, incluindo coisas como
gettype
e mesmoclass
nome para despejos de objetos (incluindo XML). É tentado e verdadeiro, eu tenho usado por anos.E se você usa o Codeigniter, adicione-o também ao seu CI EXTREMAMENTE SIMPLESMENTE. Primeiro, vá
application/config/autoload.php
e verifique sehelper
'string'
está ligado.Em seguida, basta ir criar um arquivo nomeado
MY_string_helper.php
emapplication/helpers
simples e inserir a função em um típicoif
declaração para o check existência.| OU |, se você quiser tomar uma direção diferente.
O seguinte snippet é o mesmo que acima, exceto que mostrará suas variáveis no console do navegador. Às vezes, isso pode facilitar a depuração de chamadas de objeto sql e outras chamadas de matriz e objeto em que você está perdendo o nome da chave ou o que for.
Funciona com tudo!
fonte
echo '<pre>';var_dump($var);echo '</pre>';
mais algum texto com valor zero.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` com algunssimple html
ao seu redor, não texto com valor agregado. lol kik. Se você não gostar, não use. Apenas uma sugestão.Embelezador de matriz PHP Esta ferramenta simples pega uma matriz ou objeto de saída em PHP, como uma instrução print_r (), e formata-a em código de cores para ler facilmente seus dados. http://phillihp.com/toolz/php-array-beautifier/
fonte
Mais uma versão caseira:
http://github.com/perchten/neat_html
Eu gosto de pensar que é bastante flexível. Ele não visa um ambiente de saída específico, mas possui vários argumentos opcionais que você pode especificar por que alterar a saída / impressão ou comportamento, além de algumas configurações persistentes.
fonte
Aqui está uma extensão do chrome que escrevi para resolver esse problema.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
fonte
Desenvolvi uma extensão chrome e um plugin jquery para embelezar var_dumps
https://github.com/netfox01/fleX-debug
fonte
Se você está lidando com matrizes muito grandes em PHP, esta função pode ajudar:
Basicamente, despeja toda a matriz onde cada elemento está em uma linha separada, o que é benéfico para encontrar os caminhos completos certos para certos elementos.
Exemplo de saída:
Veja: Como exportar array PHP onde cada par de valores-chave está em uma linha separada?
fonte
Estou surpreso que ninguém tenha mencionado o código mais fácil (embora não muito bonito). Se você deseja apenas obter uma saída legível (sem cores ou recuo), é simples
<pre>
umvar_dump
trabalho simples , como em:Não é possível obter uma sobrecarga muito menor do que isso!
fonte
Eu escrevi turma pequena que é semelhante ao Krumo, mas muito mais fácil de incorporar ao aplicativo.
Aqui está o link: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
E aqui exemplo de saída: http://langpavel.php5.cz/debug_sample.html
fonte
O meu preferido é depurar em https://github.com/hazardland/debug.php, que é uma biblioteca que contém apenas uma única função chamada debug (você pode copiar essa função no seu projeto ou na sua biblioteca) . A saída html típica de debug () se parece com isso:
Mas você pode enviar dados como um texto sem formatação com a mesma função também (com quatro guias com recuo de espaço) como este (e até registrá-los em arquivo, se necessário):
fonte
TVarDumper
Esta é uma ótima ferramenta que se destina a substituir a função PHP com bugs
var_dump
eprint_r
, uma vez que pode identificar corretamente os objetos referenciados recursivamente em uma estrutura complexa de objetos. Ele também possui um controle de profundidade recursivo para evitar a exibição recursiva indefinida de algumas variáveis peculiares.Veja:
TVarDumper.php
.Por outras soluções alternativas que oferece mais vantagens em relação a
var_dump
eprint_r
e pode suportar referências circulares, por favor consulte: Usando print_r e var_dump com referência circular .Para mais idéias, verifique também: Como você depura scripts PHP?
fonte
O meu é mais simples, para mim não tenho muito conhecimento / tempo para alterar a infraestrutura, instalar o xdebug, etc.
E em outros casos, bem, você não precisa de muito para um site simples do WP, por exemplo
Então eu uso:
isso realmente me ajuda muito.
mas como eu prefiro o DevConsole Environment, uso esta função incrível, mas simples:
https://codeinphp.github.io/post/outputting-php-to-browser-console/
Pequenos ajustes:
fonte
Outra opção é
Então, no seu arquivo, você apenas usa
dump($var)
e você acaba com uma saída como essafonte
Eu tive que adicionar outra resposta aqui, porque eu realmente não queria seguir as etapas das outras soluções. É extremamente simples e não requer extensões, inclui etc e é o que eu prefiro. É muito fácil e muito rápido.
Primeiro, basta json_encode a variável em questão:
Copie o resultado obtido no JSON Editor em http://jsoneditoronline.org/, basta copiá-lo no painel esquerdo, clique em Copiar> e ele imprimirá o JSON em um formato de árvore muito bom.
Para cada um deles, mas espero que isso ajude outros a terem mais uma boa opção! :)
fonte