FirePHP, otra herramienta de depuración de PHP

Llevo años usando Xdebug para hacer depuración de PHP, pero últimamente estoy ocupando algo más.

FirePHP está compuesto de 2 partes, una librería PHP (puede ser usada en versión orientada a objetos o en funciones). La otra parte es una extensión para Firefox (también hay otras extensiones de terceros para otros navegadores, como Google Chrome), que a su vez extiende la funcionalidad de la ya conocida extensión Firebug.

¿Para que sirve?

Firebug añade un panel donde se puede llevar control de varios tipos de error que son detectados por el navegador, sobre todo en tiempo de ejecución como lo es con javascript de las páginas web o también de las mismas extensiones de Firefox.

FirePHP añade algo más. Por el lado de la librería, Firebug es capaz de enviar información de depuración a través de las cabeceras HTTP y no en el contenido (como lo hace el reemplazo de la gestión de errores nativa de PHP que añade Xdebug). Esto tiene varias ventajas, por ejemplo:

  • Evita que al desplegarse errores sobre el HTML de un sitio, este se descuadre su diseño, o debido al diseño, no pueda verse bien el error en ciertos casos.
  • Evitar corrupción de datos cuando PHP genera salidas que no son de texto plano, por ejemplo al generar un PDF dinámicamente o imágenes (con php_gd2).
  • Al hacer peticiones por ajax, donde generalmente uno “no ve” lo que está llegando (con Firebug se puede ver), y por lo tanto tampoco se ve si la salida venía con errores entremedio.
  • En la misma linea de los 2 puntos anteriores, evita que se corrompa una salida en json o xml al hacer peticiones ajax que vengan con errores.

Por el lado del cliente, añade un filtro a Firebug para detectar estas cabeceras y desplegarlas en la Consola de Firebug.

Además, con un pequeño “hack”, se pueden redirigir TODOS los errores estándar que salen por pantalla, a las cabeceras, simplemente con un script (en PHP).

Hermoso, ¿y como lo hago funcionar?

Simple.

En el lado del cliente, instalar las extensiones Firebug y FirePHP.

En el lado del servidor, solo hace falta bajar y e instalar la librería en alguna carpeta que este dentro del include_path de PHP. Eso se puede ver en el php.ini o vía phpinfo().

Listo. Ahora cada vez que se quiera exponer una variable o dato de PHP por la consola de Firebug, es cosa de llamar una función (o método) que provee FirePHP. Al ejecutar el script se verá ese dato en la consola.

Redirigir Errores a las cabeceras

Ahora si además queremos que cualquier error (E_WARNING, E_NOTICE, por ejemplo) se vean a través de la consola de Firebug, entonces además hace falta un hack.

Primero es necesario crear un script php con el siguiente contenido:

registerErrorHandler(
            $throwErrorExceptions=false);
$firephp->registerExceptionHandler();
$firephp->registerAssertionHandler(
            $convertAssertionErrorsToExceptions=true,
            $throwAssertionExceptions=false);

ob_start();

Se debe añadir en la configuración de php.ini, en la directiva auto_prepend_file, la ruta directa a un script, llamemoslo “firephp.php”. Supongamos que está en c:\www\firephp.php quedaría así:

auto_prepend_file = “c:\www\firephp.php”

En mi estación Linux/Mac lo tengo así:

auto_prepend_file = “/Volumes/Documentos/devel/www/firephp.php”

Pruebas

Nada especial. Es cosa de crear algún script y añadirle algo como:

$var = array ('uno', 2, array('sadf', 'qwerty'), 'tres' );
FB::log($var);

y para probar errores:

trigger_error('HOLA, ESTE ES UN FALLO INTENCIONAL');

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *