Faça var_dump parecer bonito


131

Eu tenho um $_GET[]conjunto de variáveis ​​de consulta simples para mostrar dados de teste ao extrair consultas do banco de dados.

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

Quando eu faço var_dump, como esperado, é essa grande cadeia de caracteres que é toda esmagada. Existe uma maneira de adicionar quebras de linha pelo menos para isso ou exibir a var_dumpde uma maneira que seja mais legível? Estou aberto a sugestões do jQuery sobre como manipular a string depois que ela for publicada.


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

9
O QUE É ESTA MÁGICA ?!
Plummer


Eu não acho que isso estava na loja virtual quando a pergunta foi feita inicialmente. Vale uma chance para quem estiver olhando.
Plummer

1
Eu acho que você só quer print_r($data). php.net/manual/en/function.print-r.php
Drew Baker

Respostas:


369

Eu realmente amo var_export(). Se você gosta de copiar / colar código, tente:

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

Ou até algo assim para destacar a sintaxe da cor:

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

Você pode fazer o mesmo com print_r(). Para var_dump()você, você só precisa adicionar as <pre>tags:

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

7
Note-se que echo, var_exporte highlight_stringsão todas as funções php e necessidade de estar dentro de um <?php ?>bloco. Sim, mesmo que a linha de função destacar_cota tenha um par <? Php?> Dentro, é necessário um par também no exterior.
precisa saber é o seguinte

Uma variação mais curta deste var_dump:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg

40

Experimente a extensão xdebug para php.

Exemplo:

<?php var_dump($_SERVER); ?>

Saídas:

insira a descrição da imagem aqui


7
Mente-lhe, xdebug faz ALLOT mais do que apenas muito var_dump :)
Latheesan

Eu costumava ver isso ao fazer var_dump, mas agora que tenho o wampserver 2.5 com o php 5.5.12, vejo-o não formatado. Como é que eu pude ver como sua foto antes, sem instalar nada além de wampserver?
Limon

1
Isso é definitivamente muito sexy. Não sei por que isso não está marcado como a solução correta, mas você pode fornecer mais detalhes sobre o processo de instalação. No Windows, ele era apenas extension=php_xdebug.dll, nãozend_extension=/some/really/long/specific/path/xdebug.so
Kraang Prime

22

Usar elemento HTML pré-formatado

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

10

Fiz uma adição às respostas do @AbraCadaver. Eu incluí um script javascript que excluirá a tag de início e fechamento do php. Teremos um despejo limpo e bonito.

Pode ser alguém assim também.

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 antes:

insira a descrição da imagem aqui

Resultado Após:

insira a descrição da imagem aqui

Agora não temos a tag inicial e final do php


3

Se tudo estiver "esmagado", você poderá experimentar o velho "visualizar código-fonte". Às vezes, os despejos, mensagens e exceções parecem ser apenas uma longa sequência quando acontece que as quebras de linha simplesmente não são exibidas. Especialmente árvores XML.

Como alternativa, uma vez eu criei uma pequena ferramenta chamada InteractiveVarDump para esse propósito. Certamente tem seus limites, mas também pode ser muito conveniente às vezes. Mesmo que tenha sido projetado com o PHP 5 em mente.


1

A melhor e mais fácil maneira de obter var_dump é usar xDebug (deve ter para qualquer php dev)

No console: apt-get install php-xdebug depois disso, você deve abrir o php.ini (depende de qual pilha você usa), pois é /etc/php/7.0/fpm/php.ini

Procurar por display_errors

definir o mesmo -> display_errors = On

Verifique html_errorsno mesmo arquivo um pouco abaixo, também deve serOn

Salvar e sair

Depois de aberto /etc/php/7.0/fpm/conf.d/20-xdebug.ini

E adicione no final: `` `xdebug.cli_color = 1

`` Salve e saia.

Muitas outras opções e documentação disponíveis para o xdebug podem ser encontradas aqui.

https://xdebug.org/docs/

Boa sorte e divirta-se !!!

Resultado



1

Aqui está minha função de ter um bonito var_dump. Combinado com o Xdebug , ajuda muito a ter uma melhor visão do que estamos descartando.

Melhorei um pouco a exibição do Xdebug (dê um pouco de espaço, separador entre valores, envolva variáveis ​​longas, etc.).

Quando você chama a função, pode definir um título, um plano de fundo, uma cor de texto para distinguir todo o seu var_dump em uma página.

Ou não ;)

/**
 * 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 não tenho representante suficiente para fechar isso como duplicado, mas é um caso alguém possa fazer isso. Postei a mesma coisa em Uma alternativa Var_dump mais bonita / informativa em PHP?mas, para economizar tempo, copio / colo aqui também:

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 imprime o JSON em um formato de árvore muito bom.

Para cada um deles, mas espero que isso ajude alguns outros a terem mais uma boa opção! :)



-2

Eu escrevi uma função ( debug_display) que pode imprimir, matrizes, objetos e informações de arquivos de maneira 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

Usar

echo nl2br(var_dump());

Isso deve funcionar ^^


9
var_dump não retorna nada, ele gera diretamente.
AbraCadaver
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.