Como escrever no console em PHP?

324

É possível escrever uma string ou fazer login no console?

O que eu quero dizer

Assim como no JSP, se imprimirmos algo como system.out.println("some"), estará lá no console, não em uma página.

Labeeb Panampullan
fonte

Respostas:

145

Raposa de fogo

No Firefox, você pode usar uma extensão chamada FirePHP, que permite o registro e o despejo de informações de seus aplicativos PHP no console. Este é um complemento para a incrível extensão de desenvolvimento web Firebug .

cromada

No entanto, se você estiver usando o Chrome, existe uma ferramenta de depuração do PHP chamada Chrome Logger ou webug (o webug tem problemas com a ordem dos logs).

Mais recentemente, o Clockwork está em desenvolvimento ativo, estendendo as Ferramentas do desenvolvedor, adicionando um novo painel para fornecer informações úteis sobre depuração e criação de perfil. Ele fornece suporte imediato ao Laravel 4 e Slim 2 e o suporte pode ser adicionado por meio de sua API extensível.

Usando o Xdebug

Uma maneira melhor de depurar seu PHP seria via Xdebug . A maioria dos navegadores fornece extensões auxiliares para ajudá-lo a passar a string de cookie / consulta necessária para inicializar o processo de depuração.

Malaquias
fonte
5
Há também uma extensão do Safari para depuração do PHP chamada Xdebug Helper. Eu instalei-o desta página: extensions.apple.com/#tab
Mark McKelvie
3
O link do PHP de fogo está morto
Brian Leishman
9
echo "<script> console.log ('PHP:',", get_option ("slides_data"), "); </script>";
Azmat Karim Khan
4
OP afirma que ele queria imprimir na saída padrão, não no console html / js.
beppe9000
6
O FirePHP está oficialmente morto.
TimSparrow
407

Ou você usa o truque do PHP Debug para console .

Primeiro você precisa de uma pequena função auxiliar PHP

function debug_to_console($data) {
    $output = $data;
    if (is_array($output))
        $output = implode(',', $output);

    echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
}

Então você pode usá-lo assim:

debug_to_console("Test");

Isso criará uma saída como esta:

Debug Objects: Test
Senador
fonte
5
No FireFox v27 ele produz"Debug Objects: " . $data . ""
Mawg diz que restabelece Monica em 23/03
A única maneira de tornar isso mais útil seria fazer um par variável $ name: 'data' no log. Função agradável embora.
Imperative 30/07
10
@Mawg (e as pessoas que aprovaram esse comentário): se $dataaparecer na saída, você não digitou a função exatamente como mostrado. Observe atentamente as aspas simples e duplas, para garantir que correspondam ao código acima. $dataé uma variável php; no momento em que a página é enviada ao navegador, essa variável php será substituída pelo parâmetro passado para debug_to_console. O navegador nunca deve ver $data. (Se você olhar page sourceno navegador, ele não deveria dizer $data.)
ToolmakerSteve
1
Obrigado pela dica do meu post. Mas o tempo e o conhecimento mudaram, a função também;) Estou atualizando agora.
bueltge
3
Portanto, em outras palavras, a resposta é esta: echo "<script> console.log ('Objetos de depuração:". $ Output. "'); </script>";
Christine
69

Se você está procurando uma abordagem simples, eco como JSON:

<script>
    console.log(<?= json_encode($foo); ?>);
</script>
Travis
fonte
4
Isso adiciona um pouco mais de contexto:function debug_log( $object=null, $label=null ){ $message = json_encode($object, JSON_PRETTY_PRINT); $label = "Debug" . ($label ? " ($label): " : ': '); echo "<script>console.log(\"$label\", $message);</script>"; }
robrecord
OP afirma que ele queria imprimir na saída padrão, não no console html / js.
beppe9000
@ beppe9000 Isso está incorreto. O OP pergunta se ele pode escrever do PHP no console. Citação: "É possível escrever uma string ou fazer login no console?"
Dawson Irvine
com isso, você pode evitar var_dumps e similares. Funciona muito bem e o console permite alternar o json de uma maneira agradável.
Mbotet 11/06/19
41

Por padrão, toda saída é acessada stdout, que é a resposta HTTP ou o console, dependendo de seu script ser executado pelo Apache ou manualmente na linha de comando. Mas você pode usar error_logpara o log e vários fluxos de E / S podem ser gravados com fwrite.

nikc.org
fonte
8
Obrigado, error_logé o que eu precisei enviar para o terminal a partir do servidor da Web embutido em PHP
Martín Coll
37

Tente o seguinte. Está funcionando:

echo("<script>console.log('PHP: " . $data . "');</script>");
Mandy
fonte
5
Isso não é muito tempo real, pois o php envia toda a página após o processamento. Além disso, se houver um erro no arquivo php, você não verá nenhum dos logs, porque ele retornará apenas uma página de erro, ignorando assim as impressões anteriores.
Miro Markaravanes
1
Gostaria de salientar que o @MiroMarkaravanes está absolutamente correto - erros fatais podem impedir a saída do console.log, a menos que você tenha certeza de lidar com / capturar todos os erros possíveis. Especialmente ao usar o buffer de saída - se o seu buffer não chega à tela, o console.log também não sai. É algo para se estar atento.
whoshotdk
1
OP afirma que ele queria imprimir na saída padrão, não no console html / js.
beppe9000
19
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

Cria um

<div>

com o

display="none"

para que a div não seja exibida, mas o

console.log()

A função é criada em javascript. Então você recebe a mensagem no console.

Neo
fonte
3
Tecnicamente, esta é a resposta certa para a pergunta inicial - como escrever no PHP no console do navegador. Mas acho que o autor está tentando depurar o PHP para que haja melhores opções. No entanto, não deve ser diminuído, estritamente falando, esta é uma resposta correta.
Rolf
1
eu certamente achei incrivelmente útil!
AlbertFev
Mantendo-o simples, esta solução é ótima porque é auto-explicativa. Especialmente quando você tem muito o que mastigar ao mesmo tempo em que estou passando agora.
Olu Adabonyan
2
Eu não entendo porque você precisa de um div. se você tiver apenas um <script>bloco, nada será exibido no navegador.
Kodo Johnson
1
Além disso, se sua mensagem de erro estiver armazenada em uma variável ou se contiver aspas, seria bom agrupar a mensagem em uma chamada para json.encodeque as aspas não quebrem sua linha de código. Por exemplo:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman 01/06/19
18

Como autor da página vinculada na resposta popular , gostaria de adicionar minha última versão desta função auxiliar simples. É muito mais sólido.

Eu uso json_encode()para verificar se o tipo de variável não é necessário e também adicionar um buffer para resolver problemas com estruturas. Não há um retorno sólido ou uso excessivo de header().

/**
 * Simple helper to debug to the console
 *
 * @param $data object, array, string $data
 * @param $context string  Optional a description.
 *
 * @return string
 */
function debug_to_console($data, $context = 'Debug in Console') {

    // Buffering to solve problems frameworks, like header() in this and not a solid return.
    ob_start();

    $output  = 'console.info(\'' . $context . ':\');';
    $output .= 'console.log(' . json_encode($data) . ');';
    $output  = sprintf('<script>%s</script>', $output);

    echo $output;
}

Uso

// $data is the example variable, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console($data);`

Captura de tela do resultado

Também um exemplo simples como imagem para entender muito mais fácil:

Digite a descrição da imagem aqui

bueltge
fonte
Enquanto eu faço como esta idéia, você pode confirmar que não seria adequado para requisições Ajax?
Mawg diz que restabelece Monica
1
Sim, é php estático puro, não Ajax.
bueltge
Mas, parece estar adicionando código HML / JS a um corpo de página - e meu Ajax não retorna nenhum corpo de página. Desculpe, mas eu não undertsand & thansk para tentar ajuda ot me
MAWG diz Reintegrar Monica
1
Você deve acionar a função auxiliar antes de solicitar a chamada ajax, para obter também um resultado no console.
bueltge
Então eu coloquei uma variável lá e cada personagem acabou em sua própria linha. Meio curioso para saber por que está fazendo isso? Nunca usei console.info
yardpenalty.com 21/10
17

Eu acho que pode ser usado -

function jsLogs($data) {
    $html = "";
    $coll;

    if (is_array($data) || is_object($data)) {
        $coll = json_encode($data);
    } else {
        $coll = $data;
    }

    $html = "<script>console.log('PHP: ${coll}');</script>";

    echo($html);
    # exit();
}

# For String
jsLogs("testing string"); #PHP: testing string

# For Array
jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]

# For Object
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}
Pankaj Bisht
fonte
3
Muito sofisticado. Obrigado @Pankaj Bisht
Vickar
2
Uma explicação estaria em ordem.
Peter Mortensen
14

Algumas ótimas respostas que adicionam mais profundidade; mas eu precisava de algo mais simples e mais parecido com o console.log()comando JavaScript .

Eu uso PHP em muitas "coleta de dados e viro XML" em aplicativos Ajax. O JavaScript console.lognão funciona nesse caso; quebra a saída XML.

Xdebug, etc. teve problemas semelhantes.

Minha solução no Windows:

  • Configure um .txtarquivo de fácil acesso e gravável
  • Defina a error_logvariável PHP no .iniarquivo para gravar nesse arquivo
  • Abra o arquivo no Windows File Explorer e abra um painel de visualização para ele
  • Use o error_log('myTest');comando PHP para enviar mensagens

Esta solução é simples e atende às minhas necessidades na maioria das vezes. PHP padrão, e o painel de visualização é atualizado automaticamente toda vez que o PHP grava nele.

Klompenrunner
fonte
A quebra da mensagem json_encodetambém resolveria o problema? Nesse caso, pode ser que as aspas da mensagem tenham interferido nas aspas do script. (por exemplo echo "<script>console.log(".json_encode($msg).")</script>";:). Caso contrário, estou curioso para saber qual foi o problema que causou a quebra do script console.log e como / por que sua solução corrigiu isso. Sua solução é boa - só estou tentando aprender mais sobre as condições que causaram console.loga quebra da saída xml. Em muitos casos, um log de erros como você fez é muito melhor do que um rápido console.log.
21419 SherlockHohman #
13
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

Interação PHP e JavaScript.

0DAYanc
fonte
Uma explicação estaria em ordem. Você pode elaborar ( editando sua resposta , não respondendo nos comentários)?
Peter Mortensen
11

Acho isso útil:

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        $output = '<script>console.log("' . str_repeat(" ", $priority-1) . (is_array($data) ? implode(",", $data) : $data) . '");</script>';

        echo $output;
    }
}

E use-o como:

<?php
    $debug = 5; // All lower and equal priority logs will be displayed
    console('Important', 1 , $debug);
    console('Less Important', 2 , $debug);
    console('Even Less Important', 5 , $debug);
    console('Again Important', 1 , $debug);
?>

Quais saídas no console:

Important
 Less Important
     Even Less Important
Again Important

E você pode desativar os logs menos importantes limitando-os usando o valor $ debug.

zee
fonte
então, se você ligar para console('Even Less Important' ,6 , $debug);isso, não será exibido no console? Por quê então? é algo acima de 5 não exibido
HattrickNZ
2
@HattrickNZ Isso permite que você tenha níveis diferentes de mensagens de log. Se você estiver depurando, talvez queira mostrar um fluxo de mensagens bastante falador com muitas informações; no entanto, durante operações normais, você pode definir a depuração como 1, para obter apenas os erros / itens de log mais importantes exibidos. Cabe a você decidir quais itens são importantes ao escrever o código.
Toby Allen
OP afirma que ele queria imprimir na saída padrão, não no console html / js.
beppe9000
1
Sim, mas o código repetido (redundância) - deve ser refatorado: $output = '<script>console.log("' . str_repeat(" ", $priority-1)e . '");</script>';. Somente implode(",", $data)e $dataé diferente.
Peter Mortensen
1
@Peter Mortensen - história verdadeira! Editado em mais de 4 anos! :)
zee
7

Curto e fácil, para matrizes, strings ou também objetos.

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}
Carlos Lugo
fonte
1
O OP afirma que ele queria imprimir no terminal / saída padrão do lado do servidor, não no console html / js.
beppe9000
7
function phpconsole($label='var', $x) {
    ?>
    <script type="text/javascript">
        console.log('<?php echo ($label)?>');
        console.log('<?php echo json_encode($x)?>');
    </script>
    <?php
}
ashraf mohammed
fonte
1
O OP afirma que ele queria imprimir no terminal / saída padrão do lado do servidor, não no console html / js.
beppe9000
7

Se você deseja gravar no arquivo de log PHP, e não no console JavaScript, você pode usar isto:

error_log("This is logged only to the PHP log")

Referência: error_log

Dan Green-Leipciger
fonte
Em seguida, apenas no salto ssh e cauda do log
Hayden Thring
6

Para o Chrome, existe uma extensão chamada Chrome Logger, que permite registrar mensagens PHP.

O Firefox DevTools ainda possui suporte integrado ao protocolo Chrome Logger .

Para habilitar o log, basta salvar o arquivo 'ChromePhp.php' no seu projeto. Então pode ser usado assim:

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

Exemplo retirado da página do GitHub .

A saída pode ficar assim:

Log do servidor no Firefox DevTools

Sebastian Zartner
fonte
Você também pode instalá-lo via compositor:"ccampbell/chromephp": "*"
padawanTony
5

Há também uma grande extensão do Google Chrome, o PHP Console , com uma biblioteca PHP que permite:

  • Veja erros e exceções no console JavaScript do Chrome e nos pop-ups de notificação.
  • Despejar qualquer tipo de variável.
  • Execute o código PHP remotamente.
  • Proteja o acesso por senha.
  • Agrupe os logs do console por solicitação.
  • Vá para o error file:lineseu editor de texto.
  • Copie os dados de erro / depuração para a área de transferência (para testadores).
barbushin
fonte
1
Meu método preferido de gravação de erros PHP, exceção e saída de depuração definida pelo usuário no console JS. Eu o uso há anos - altamente confiável e atualizado com as revisões do PHP. Eu não usaria mais nada.
Velojet 27/09/2015
3

Eu estava procurando uma maneira de depurar o código em um plugin do WordPress que estava desenvolvendo e me deparei com este post.

Peguei os bits de código mais aplicáveis ​​a mim de outras respostas e os combinei em uma função que eu posso usar para depurar o WordPress. A função é:

function debug_log($object=null, $label=null, $priority=1) {
    $priority = $priority<1? 1: $priority;
    $message = json_encode($object, JSON_PRETTY_PRINT);
    $label = "Debug" . ($label ? " ($label): " : ': ');
    echo "<script>console.log('" . str_repeat("-", $priority-1) . $label . "', " . $message . ");</script>";
}

O uso é o seguinte:

$txt = 'This is a test string';
$sample_array = array('cat', 'dog', 'pig', 'ant', 'fly');
debug_log($txt, '', 7);
debug_log($sample_array);

Se essa função for usada no desenvolvimento do WordPress, ela deverá ser colocada no functions.phparquivo do tema filho e poderá ser chamada em qualquer lugar do código.

Clinton
fonte
2

Eu abandonei tudo isso em favor do Debugger & Logger . Não posso elogiá-lo o suficiente!

Basta clicar em uma das guias no canto superior direito ou no "clique aqui" para expandir / ocultar.

Observe as diferentes "categorias". Você pode clicar em qualquer matriz para expandi-la / recolhê-la.

Na página da web

Principais características:

  • Mostrar variáveis ​​globais ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE etc.)
  • Mostrar versão PHP e extensões carregadas
  • Substitua o PHP incorporado no manipulador de erros
  • Consultas SQL de log
  • Monitorar o tempo de execução de consultas de código e SQL
  • Inspecionar variáveis ​​para mudanças
  • Rastreamento de chamadas de função
  • Análise de cobertura de código para verificar quais linhas de script foram executadas
  • Despejo de todos os tipos de variáveis
  • Inspetor de arquivos com marcador de código para visualizar o código-fonte
  • Enviar mensagens para o console JavaScript (somente Chrome), para scripts Ajax

Digite a descrição da imagem aqui

Mawg diz que restabelece Monica
fonte
Oi. Existe uma bifurcação mais recente ou ferramenta similar mais atualizada e atualmente mantida?
Metafaniel
Eu não o codifiquei, então, para o mais novo fork, acho que basta ir ao GitHub? Para alternativas, pergunte no softwarerecs.stackexchange.com e nós o ajudaremos.
Mawg diz que restabelece Monica
1
@MawgHi, obrigado. Eu perguntei porque o phptoolcase Github e os garfos listados lá não foram atualizados em 5 anos. Obrigado pelo outro site StackExchange. Acabei de encontrar Clockwork . Eu me pergunto se é semelhante ou melhor ...
Metafaniel
E graças a você para Clockwork. Parece excelente (é uma pena que eu não use nenhuma dessas estruturas (eu me pergunto se é assim que pode despejar consultas de banco de dados - conectando a estrutura)). Vale a pena investigar. (+1)
Mawg diz que restabelece Monica em 30/11
2

Para chamadas Ajax ou respostas XML / JSON, nas quais você não deseja mexer com o corpo, é necessário enviar logs por meio de cabeçalhos HTTP e adicioná-los ao console com uma extensão da web. É assim que o FirePHP (não está mais disponível) e o QuantumPHP (um fork do ChromePHP) fazem isso no Firefox.

Se você tiver paciência, o x-debug é uma opção melhor - você obtém uma visão mais profunda do PHP, com a capacidade de pausar seu script, ver o que está acontecendo e, em seguida, retomar o script.

Frank Forte
fonte
O FirePHP não é mais viável .
Peter Mortensen
2

Talvez eu esteja atrasado para uma festa, mas estava procurando uma implementação da função de log que:

  • usa um número variável de argumentos separados por vírgula, assim como javascript console.log(),
  • fornece uma saída formatada (não apenas uma sequência serializada),
  • é distinguível de um javascript comum console.log().

Portanto, a saída é assim:

insira a descrição da imagem aqui

(O snippet abaixo é testado em php 7.2.11. Não tenho certeza sobre sua compatibilidade com versões anteriores do php. Também pode ser um problema para javascript (em termos de navegadores antigos), porque cria uma vírgula à direita após os console.log()argumentos - o que não é legal até ES 2017.)

<?php

function console_log(...$args)
{
    $args_as_json = array_map(function ($item) {
        return json_encode($item);
    }, $args);

    $js_code = "<script>console.log('%c 💬 log from PHP: ','background: #474A8A; color: #B0B3D6; line-height: 2',";
    foreach ($args_as_json as $arg) {
        $js_code .= "{$arg},";
    }
    $js_code .= ")</script>";

    echo $js_code;
}

$list = ['foo', 'bar'];
$obj = new stdClass();
$obj->first_name = 'John';
$obj->last_name = 'Johnson';

echo console_log($list, 'Hello World', 123, $obj);

?>
HynekS
fonte
Este trecho me salvou. :) Eu precisava fazer algumas alterações no código de produção sem acesso aos servidores reais, e isso foi perfeito para contornar isso. Obrigado!
Raphael Aleixo
Fico feliz por poder ajudar.
HynekS 20/03
1

Qualquer um destes dois está funcionando:

<?php
    $five = 5;
    $six = 6;
?>
<script>
    console.log(<?php echo $five + $six ?>);
</script>


<?php
    $five = 5;
    $six = 6;
    echo("<script>console.log($five + $six);</script>");
?>
roybraym
fonte
1

Aqui está a minha solução, a coisa boa sobre este é que você pode passar quantos parâmetros quiser.

function console_log()
{
    $js_code = 'console.log(' . json_encode(func_get_args(), JSON_HEX_TAG) .
        ');';
    $js_code = '<script>' . $js_code . '</script>';
    echo $js_code;
}

Chame assim

console_log('DEBUG>>', 'Param 1', 'Param 2');
console_log('Console DEBUG:', $someRealVar1, $someVar, $someArray, $someObj);

Agora você deve conseguir ver a saída em seu console, feliz codificação :)

Imran Zahoor
fonte
0

Usar:

function console_log($data) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if (is_array($data))
        $dataPart = implode(',', $data);
    else
        $dataPart = $data;

    $toSplit = $caller['file'])) . ':' .
               $caller['line'] . ' => ' . $dataPart

    error_log(end(split('/', $toSplit));
}
btm1
fonte
1
Você deve adicionar uma dica sobre sua ideia e solução. Além disso, a fonte possui fonte não utilizada.
bueltge 13/05
0

Aqui está uma função útil. É super simples de usar, permite passar quantos argumentos você quiser, de qualquer tipo, e exibirá o conteúdo do objeto na janela do console do navegador como se você tivesse chamado console.log do JavaScript - mas do PHP

Observe que você também pode usar tags passando 'TAG-YourTag', e ele será aplicado até que outra tag seja lida, por exemplo, 'TAG-YourNextTag'

/*
 *  Brief:         Print to console.log() from PHP
 *
 *  Description:   Print as many strings,arrays, objects, and
 *                 other data types to console.log from PHP.
 *
 *                 To use, just call consoleLog($data1, $data2, ... $dataN)
 *                 and each dataI will be sent to console.log - note
 *                 that you can pass as many data as you want an
 *                 this will still work.
 *
 *                 This is very powerful as it shows the entire
 *                 contents of objects and arrays that can be
 *                 read inside of the browser console log.
 *
 *                 A tag can be set by passing a string that has the
 *                 prefix TAG- as one of the arguments. Everytime a
 *                 string with the TAG- prefix is detected, the tag
 *                 is updated. This allows you to pass a tag that is
 *                 applied to all data until it reaches another tag,
 *                 which can then be applied to all data after it.
 *
 *                 Example:
 *
 *                 consoleLog('TAG-FirstTag', $data, $data2, 'TAG-SecTag, $data3);
 *
 *                 Result:
 *                     FirstTag '...data...'
 *                     FirstTag '...data2...'
 *                     SecTag   '...data3...'
 */
function consoleLog(){
    if(func_num_args() == 0){
        return;
    }

    $tag = '';
    for ($i = 0; $i < func_num_args(); $i++) {
        $arg = func_get_arg($i);
        if(!empty($arg)){
            if(is_string($arg) && strtolower(substr($arg, 0, 4)) === 'tag-'){
                $tag = substr($arg, 4);
            }else{
                $arg = json_encode($arg, JSON_HEX_TAG | JSON_HEX_AMP );
                echo "<script>console.log('" . $tag . " " . $arg . "');</script>";
            }
        }
    }
}

NOTA: func_num_args () e func_num_args () são funções PHP para ler um número dinâmico de argumentos de entrada e permitem que essa função tenha infinitas solicitações console.log de uma chamada de função.

Chris Sprague
fonte
0

Embora essa seja uma pergunta antiga, eu tenho procurado por isso. Aqui está minha compilação de algumas soluções respondidas aqui e algumas outras idéias encontradas em outros lugares para obter uma solução única para todos.

CÓDIGO:

    // Post to browser console
    function console($data, $is_error = false, $file = false, $ln = false) {
        if(!function_exists('console_wer')) {
            function console_wer($data, $is_error = false, $bctr, $file, $ln) {
                echo '<div display="none">'.'<script type="text/javascript">'.(($is_error!==false) ? 'if(typeof phperr_to_cns === \'undefined\') { var phperr_to_cns = 1; document.addEventListener("DOMContentLoaded", function() { setTimeout(function(){ alert("Alert. see console."); }, 4000); });  }' : '').' console.group("PHP '.(($is_error) ? 'error' : 'log').' from "+window.atob("'.base64_encode((($file===false) ? $bctr['file'] : $file)).'")'.((($ln!==false && $file!==false) || $bctr!==false) ? '+" on line '.(($ln===false) ? $bctr['line'] : $ln).' :"' : '+" :"').'); console.'.(($is_error) ? 'error' : 'log').'('.((is_array($data)) ? 'JSON.parse(window.atob("'.base64_encode(json_encode($data)).'"))' : '"'.$data.'"').'); console.groupEnd();</script></div>'; return true;
            }
        }
        return @console_wer($data, $is_error, (($file===false && $ln===false) ? array_shift(debug_backtrace()) : false), $file, $ln);
    }

    //PHP Exceptions handler
    function exceptions_to_console($svr, $str, $file, $ln) {
        if(!function_exists('severity_tag')) {
            function severity_tag($svr) {
                $names = [];
                $consts = array_flip(array_slice(get_defined_constants(true)['Core'], 0, 15, true));
                foreach ($consts as $code => $name) {
                    if ($svr & $code) $names []= $name;
                }
                return join(' | ', $names);
            }
        }
        if (error_reporting() == 0) {
            return false;
        }
        if(error_reporting() & $svr) {
            console(severity_tag($svr).' : '.$str, true, $file, $ln);
        }
    }

    // Divert php error traffic
    error_reporting(E_ALL);  
    ini_set("display_errors", 1);
    set_error_handler('exceptions_to_console');

TESTES E USO:

O uso é simples. Inclua a primeira função para postar no console manualmente. Use a segunda função para desviar o tratamento de exceções php. O teste a seguir deve dar uma idéia.

    // Test 1 - Auto - Handle php error and report error with severity info
    $a[1] = 'jfksjfks';
    try {
          $b = $a[0];
    } catch (Exception $e) {
          echo "jsdlkjflsjfkjl";
    }

    // Test 2 - Manual - Without explicitly providing file name and line no.
          console(array(1 => "Hi", array("hellow")), false);

    // Test 3 - Manual - Explicitly providing file name and line no.
          console(array(1 => "Error", array($some_result)), true, 'my file', 2);

    // Test 4 - Manual - Explicitly providing file name only.
          console(array(1 => "Error", array($some_result)), true, 'my file');

EXPLICAÇÃO:

  • A função console($data, $is_error, $file, $fn)pega string ou array como primeiro argumento e a publica no console usando js insert.

  • O segundo argumento é um sinalizador para diferenciar logs normais contra erros. Para erros, estamos adicionando ouvintes de eventos para nos informar por meio de alertas se algum erro foi lançado, também destacando no console. Esse sinalizador é padronizado como false.

  • O terceiro e o quarto argumentos são declarações explícitas de números de arquivos e linhas, o que é opcional. Se ausentes, o padrão é usar a função php predefinida debug_backtrace()para buscá-las para nós.

  • A próxima função exceptions_to_console($svr, $str, $file, $ln)tem quatro argumentos na ordem chamada pelo manipulador de exceção padrão do php. Aqui, o primeiro argumento é severity, que fazemos uma verificação cruzada de constantes predefinidas usando a função severity_tag($code)para fornecer mais informações sobre erros.

AVISO PRÉVIO :

  • O código acima usa funções e métodos JS que não estão disponíveis em navegadores mais antigos. Para compatibilidade com versões mais antigas, ele precisa de substituições.

  • O código acima é para ambientes de teste, onde você sozinho tem acesso ao site. Não use isso em sites ao vivo (de produção).

SUGESTÕES:

  • A primeira função console()gerou alguns avisos, então os agrupei em outra função e chamei-a usando o operador de controle de erro '@'. Isso pode ser evitado se você não se importar com os avisos.

  • Por último, mas não menos importante, os alertas exibidos podem ser irritantes durante a codificação. Para isso, estou usando este sinal sonoro (encontrado na solução: https://stackoverflow.com/a/23395136/6060602 ) em vez de alertas pop-up. É bem legal e as possibilidades são infinitas, você pode tocar suas músicas favoritas e tornar a codificação menos estressante.

Ajay Singh
fonte