Escrevendo no console do navegador com PHP

Publicado em:

No Javascript, podemos usar o console.log para enviar alguma informação para a ferramenta de desenvolvedor do seu navegador web.

Seria possível enviar uma saída do PHP diretamente para lá?

Bem, diretamente pelo PHP, não tem como, mas há um truque simples que pode ser feito.

Enviando uma saída do PHP para o Console do Navegador

Podemos utilizar o PHP para escrever no Console através do Javascript.

Exemplo:

echo '<script>console.log("teste")</script>';

Isso exibirá"teste" no console do navegador.

Enviando JSON para o console do navegador através do PHP

Vamos fazer algo mais elaborado agora. Que tal uma função que envie os dados que você deseja examinar em formato JSON?

Exemplo:

function console_log($dados)
{
	printf('<script>console.log(%s);</script>', json_encode($dados));
}

A função acima utiliza apenas printf e json_encode. A função printf imprime uma string formatada, onde %s representa o argumento que será inserido na string, de acordo com o formato. Já a função json_encode tem como finalidade serializar os dados PHP para JSON.

Ao chamarmos essa função, ela produzirá uma saída parecida com isso:

console_log(array('nome' => 'Wallace'))

Saída:

<script>console.log({"nome": "Maxters"});</script>

Console: Enviando uma saída PHP para o Console do Javascript

Enviando o var_dump para o console do navegador

Apesar do exemplo anterior ser útil, ele possui limitações, já que alguns dados do PHP podem não ser serializados corretamente pela função json_encode, o que atrapalharia a exibição correta dos dados que você deseja analisar.

O ideal seria usar a função var_dump. Ela é muito útil para visualizar as informações de uma variável e seria interessante se conseguíssemos enviá-la ao console. Porém, diferentemente da função json_encode, que usamos anteriormente, ela não retorna valor. Ao invés disso, ela exibe a saída.

Mas, ainda assim, é possível contornar isso. Basta combinarmos o uso de ob_start e ob_get_clean para capturar o conteúdo exibido por var_dump.

Código:

function console_log($data)
{
    ob_start();
    var_dump($data);
    $output = ob_get_clean();
    printf('<script>console.log(%s);</script>', json_encode($output));
}

console_log(['name' => 'Wallace Maxters']);

O resultado será:

<script>console.log("array(1) {\n  [\"name\"]=>\n  string(15) \"Wallace Maxters\"\n}\n");</script>

Console: Enviando uma saída PHP para o Console do Javascript