¿Cómo imprimir un registro de depuración?

6 minutos de lectura

avatar de usuario
eugenio

Me gustaría depurar algún código PHP, pero supongo que imprimir un registro en la pantalla o en un archivo está bien para mí.

¿Cómo debo imprimir un registro en código PHP?

Lo normal print/printf parece ir a la salida HTML, no a la consola.

Tengo un servidor Apache ejecutando el código PHP.

  • ¿Su script se ejecuta en un navegador web o en una consola (también conocido como analizado usando php.exe en lugar de apache/iis)?

    – danielsmith

    21 de mayo de 2011 a las 3:56

  • Debería mirar esta pregunta, tiene un poco de código de registro útil: stackoverflow.com/questions/5769537/…

    – Jesús

    21 de mayo de 2011 a las 3:57

  • ¿de qué idioma vienes? Solo para que php sea muy diferente a otros lenguajes compilados

    – Ibú

    21 de mayo de 2011 a las 4:02

  • @lbu: de hecho… no me lo esperaba, printf la pregunta obtendría tantos votos a favor…

    – eugene

    24/10/2014 a las 12:44

  • error_log($cadena);

    – Thewebus

    8 de agosto de 2018 a las 19:44

Un truco menos conocido es que mod_php asigna stderr al registro de Apache. Y, hay una corriente para eso, así que file_put_contents('php://stderr', print_r($foo, TRUE)) muy bien descargará el valor de $foo en el registro de errores de Apache.

  • + uno por mencionar eso, por cierto puedes además establece el valor de error_log en ‘php://stdout’ al depurar una aplicación de consola y haz que los mensajes de error aparezcan directamente en la consola, es decir: error_log(“¡Te equivocaste!”, 3, “php://stdout”);

    – stefgosselin

    21 de mayo de 2011 a las 12:38


  • +1 Me tomó demasiado tiempo encontrar esta respuesta. Esto es todo lo que realmente estaba buscando. No pude averiguar cómo ver lo que contenía mi matriz (trabajando en Drupal).

    – SteveS

    7 mayo 2014 a las 14:31

  • También sugeriría usar var_export($foo, true) en vez de print_r($foo, true) si print_rno te da el tipo de información que necesitas.

    – ben

    14 de diciembre de 2017 a las 17:08

  • ¿No sería lo mismo que error_log(print_r($foo)); ?

    – Brunis

    5 de diciembre de 2018 a las 15:39

avatar de usuario
olivier berger

error_log(print_r($variable, TRUE)); 

podría ser útil

  • Desafortunadamente, esta es la solución más conveniente. Xdebug es demasiado pesado para ejecutarlo todo el tiempo. votado por ti

    – Phung D. An

    23 de diciembre de 2014 a las 15:57


Puedes usar registro de errores para enviar a sus servidores el archivo de registro de errores (u otro archivo opcional si lo desea)

avatar de usuario
usuario3029507

Si estás en Linux:

file_put_contents('your_log_file', 'your_content');

o

error_log ('your_content', 3, 'your_log_file');

y luego en consola

tail -f your_log_file

Esto mostrará continuamente la última línea puesta en el archivo.

Necesitas cambiar tu estado de ánimo. Estás escribiendo PHP, no cualquier otra cosa que estés acostumbrado a escribir. La depuración en PHP no se realiza en un entorno de consola.

En PHP, tiene 3 categorías de soluciones de depuración:

  1. Salida a una página web (consulte la biblioteca dBug para una mejor vista de las cosas).
  2. Escribir en un archivo de registro
  3. Depuración en sesión con xDebug

Aprenda a usarlos en lugar de tratar de hacer que PHP se comporte como cualquier otro idioma al que esté acostumbrado.

  • Como alguien que pasa mucho tiempo escribiendo aplicaciones de consola y varias no web guiones, estaré cortésmente en desacuerdo con eso.

    – stefgosselin

    21 de mayo de 2011 a las 12:33


  • Trabajo mucho manteniendo y desarrollando aplicaciones de consola y, en mi mala interpretación en inglés de la pregunta, asumí que estaba buscando depurar una aplicación de consola. Xdebug está bien y es muy útil, aunque me gusta la información de depuración justo en mi editor

    – stefgosselin

    23 de mayo de 2011 a las 1:14

  • @Stefgosselin: Netbeans hace más o menos lo mismo, aunque lo mejor que he visto con xDebug fue con Aptana.

    – Sylverdrag

    29 de mayo de 2011 a las 5:23

  • Uso xDebug en Netbeans y funciona bien la mayor parte del tiempo. Pero, hay momentos en los que necesita registrar cosas en un archivo.

    – cosan

    18 de marzo de 2017 a las 13:23

  • prueba estos también… ¡podrás hacer más!stackoverflow.com/a/44050914/2053479

    – ganesha

    18 mayo 2017 a las 14:43

¿Estás depurando en la consola? Hay varias opciones para depurar PHP. La función más común utilizada para la depuración rápida y sucia es var_dump.

Habiendo dicho eso y fuera del camino, aunque var_dump es increíble y mucha gente hace todo con eso, hay otros Herramientas y técnicas eso lo puede condimentar un poco.

Cosas para ayudar si la depuración en una página web, ajuste <pre> </pre> etiquetas alrededor de su declaración de volcado para darle el formato adecuado en matrices y objetos.

Es decir:

<div> some html code ....
      <a href="https://stackoverflow.com/questions/6079492/<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

Y, por último, pero no menos importante, asegúrese de que la depuración de su manejo de errores esté configurada para mostrar errores. Puede ser necesario agregar esto en la parte superior de su secuencia de comandos si no puede acceder a la configuración del servidor para hacerlo.

error_reporting(E_ALL);
ini_set('display_errors', '1');

¡Buena suerte!

  • Como alguien que pasa mucho tiempo escribiendo aplicaciones de consola y varias no web guiones, estaré cortésmente en desacuerdo con eso.

    – stefgosselin

    21 de mayo de 2011 a las 12:33


  • Trabajo mucho manteniendo y desarrollando aplicaciones de consola y, en mi mala interpretación en inglés de la pregunta, asumí que estaba buscando depurar una aplicación de consola. Xdebug está bien y es muy útil, aunque me gusta la información de depuración justo en mi editor

    – stefgosselin

    23 de mayo de 2011 a las 1:14

  • @Stefgosselin: Netbeans hace más o menos lo mismo, aunque lo mejor que he visto con xDebug fue con Aptana.

    – Sylverdrag

    29 de mayo de 2011 a las 5:23

  • Uso xDebug en Netbeans y funciona bien la mayor parte del tiempo. Pero, hay momentos en los que necesita registrar cosas en un archivo.

    – cosan

    18 de marzo de 2017 a las 13:23

  • prueba estos también… ¡podrás hacer más!stackoverflow.com/a/44050914/2053479

    – ganesha

    18 mayo 2017 a las 14:43

También puede escribir en un archivo como este:

$logFilePath="../logs/debug.text";
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

Asegúrese de que los permisos adecuados estén configurados para que php pueda acceder y escribir en el archivo (775).

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad