La alegría de FirePHP un curso acelerado

FirePHP es un complemento de Firefox y una combinación de bibliotecas del lado del servidor que le permite enviar todo tipo de información jugosa desde su aplicación web a su navegador, al igual que la funcionalidad console.log () con JavaScript. En este tutorial PLUS y screencast complementario, le enseñaremos cómo empezar desde el principio.!

Este tutorial incluye un screencast disponible para miembros Tuts + Premium.

Así que crees que eres un gran desarrollador web, ¿eh? No siga leyendo hasta que pase el primer desafío: responda (honestamente) "verdadero" o "falso" sobre usted a las siguientes afirmaciones:

  1. Usas Firefox para desarrollo web.
  2. Tienes la famosa extensión Firebug instalada
  3. Tu desarrollas en PHP

Si respondiste a los tres con un "verdadero" rotundo, date una palmadita en la espalda. Te perdonaré por no obtener el número tres, pero si no estás usando Firefox con Firebug ... ¿dónde has estado?!?

Necesitarás este combo ganador para completar este tutorial. Lo último que necesitarás, para convertirte en el gran maestro, desarrollador súper, codificador de tus sueños, es lo más importante: FirePHP.


¿Qué es FirePHP??

FirePHP es un complemento de Firefox y una combinación de bibliotecas del lado del servidor que le permite enviar todo tipo de información jugosa desde su aplicación web a su navegador, de una manera más agradable que la habitual:

 echo $ variable;

Este código es tan común. A veces parece la forma más rápida de simplemente descifrar el valor de $ variable para que sepas lo que es en un punto dado de ejecución de código.

Pero que si $ variable no es una cadena o un entero ¿Qué pasa si se trata de un tipo de datos complejo como una matriz o un objeto? En PHP, el código anterior no sería tan útil:


"Solo use print_r ($ variable);" Te oigo decir Muy bien los pantalones inteligentes, pero eso no es muy elegante. Tratar de encontrar el valor de un elemento de matriz en ese lío es un dolor. Y todavía no clasifica los objetos.!

Cuando vea lo que puede hacer FirePHP, ¡cambiará de opinión! Convierte la depuración en un proceso sorprendentemente agradable y da como resultado un código mucho más portátil..

En este tutorial, te mostraré cómo configurar FirePHP en tu aplicación y algunas formas excelentes de usarlo para acelerar el desarrollo y la depuración..


Paso 1: Configuración del lado del servidor

Si no tiene instalada la extensión FirePHP, instálela ahora.

La extensión de FirePHP (a la que me referiré como FirePHP de ahora en adelante) depende completamente de Firebug, por lo que también lo necesitarás. Las clases del lado del servidor (que llamaré FirePHPCore) están disponibles como una biblioteca independiente. También hay una serie de complementos para los marcos PHP y CMS populares.

Simón dice:

Aunque el nombre sugiere lo contrario, FirePHP no es solo para desarrolladores de PHP. Utiliza su propio conjunto de encabezados HTTP para enviar información desde su aplicación al navegador, por lo que puede ser fácilmente portada a otros idiomas. Hay bibliotecas del lado del servidor disponibles para ASP, Ruby, Python y más. Si no hay uno para tu idioma, siempre puedes desafiarte y escribir el tuyo..

Esto también lo hace ideal para la depuración de AJAX, ya que significa que las respuestas asíncronas son contenido limpio que contiene solo la salida que desea ver, no el código de depuración.

Continúe y descargue su biblioteca preferida del servidor. En este tutorial, me centraré en el uso de la biblioteca central independiente. Las instrucciones para configurar otras bibliotecas se pueden encontrar en la wiki de FirePHP.

Simón dice:

Si tiene la configuración de PEAR y prefiere usarla, simplemente escriba las siguientes dos líneas en la línea de comando:

 pear channel-discover pear.firephp.org pear install firephp / FirePHPCore

Una vez que hayas descomprimido el paquete, entra en el lib carpeta y copia la FirePHPCore carpeta a su servidor web o aplicación incluye carpeta.


Compreion Screencast


Simón dice:

Una de las grandes cosas de la FirePHPCore independiente es su soporte para PHP4. Así que incluso puedes conectarlo a algunos de esos sitios retro que todavía estás ejecutando!


Paso 2: Hola, FirePHP

Al igual que con todos los buenos tutoriales de codificación, comenzaremos con un ejemplo básico, el "Hola, Mundo" de FirePHP.

Crea un nuevo documento PHP en blanco. Llamaré al mío prueba.php. Guárdalo en la raíz de tu aplicación.

Para que FirePHPCore haga su trabajo, necesitamos habilitar el búfer de salida. Lea más sobre esto si no lo ha usado antes, es un buen hábito para hacerlo de todos modos..

 

Por supuesto, no debemos olvidar incluir la biblioteca FirePHPCore. Si está ejecutando PHP5, agregue esto a la parte superior del archivo:

 include_once ('includes / FirePHPCore / fb.php');

Si está ejecutando PHP4, incluya el fb.php4 archivo en su lugar.

Simón dice:

No necesitamos incluir el archivo de clase, ya que está incluido en el archivo fb.php.

Ahora podemos empezar a enviar a la consola Firebug. Escriba lo siguiente después de ob_start () y antes ob_end_flush ():

 FB :: info ('Hola, FirePHP');

Simón dice:

FirePHPCore tiene una API de procedimiento y una orientada a objetos. Realmente no hay diferencia entre los dos y puedes usar el que prefieras.

También usa el patrón de singleton para ahorrar memoria y viene con una clase auxiliar completamente estática, que prefiero usar ya que requiere menos codificación.

Abre Firefox, inicia Firebug y ve a esta página. Deberías conseguir algo como esto:


¿¡Cuan genial es eso!? Bueno, eso no es una demo muy emocionante, así que probemos algo un poco más complicado.


Paso 3: Envío de variables complejas

Veamos que pasa cuando pasamos en una variable compleja. Construiremos una matriz y veremos qué obtenemos. Agregue el siguiente código justo después de la última llamada a FB :: info ():

 $ array ['key1'] = 'algo de contenido'; $ array ['anotherKey'] [] = 1234; $ array ['anotherKey'] [] = 5678; $ array ['anotherKey'] [] = 9012; $ array [] = null; FB :: info ($ array, 'My Array Test');

Ahora guarda, ve a Firefox y actualiza..


Ok, se ve bien ... pero, espera, ¿dónde está toda la salida? Pasa el cursor sobre esa nueva línea.


Guau. El marco Firebug nos muestra todos los datos en nuestra matriz, no solo los elementos de la matriz de primer nivel, sino también los de nivel inferior, y de una manera ordenada y legible.

¡Se pone aún más interesante con los objetos! FirePHPCore hace un uso completo de la reflexión para inspeccionar las propiedades de un objeto, incluso las privadas.

Simón dice:

FirePHPCore tiene una serie de opciones que se pueden configurar para limitar el nivel de inspección en matrices y objetos. Incluso puede crear un filtro para las propiedades del objeto que no desea que pase al agente de usuario..

Puede encontrar más información sobre la API de FirePHPCore en la sede de FirePHP.


Usos prácticos

Debería ser obvio para usted que esto puede ayudar con la depuración general, pero ahora voy a ver algunas formas inventivas de usar FirePHP..

1) Una herramienta de perfiles PHP

Si usa un solo controlador frontal para enrutar todas las solicitudes y arrancar su aplicación, puede tomar el tiempo que demora cada solicitud de su aplicación en procesarse en el servidor..

Algo como esto lo haría:

 

Tenga en cuenta que esto no es una representación del tiempo de respuesta, solo tiempo de ejecución del código - qué tan rápido tu servidor ejecuta el código antes de enviarlo al agente de usuario. La salida aún tiene que viajar desde su servidor al cliente a través de la red.

Simón dice:

Puede usar la extensión YSlow para Firebug para realizar un seguimiento de los tiempos de carga de la página y la capacidad de respuesta de la aplicación..

2) Una herramienta simple de inspección de consultas SQL

Si usa una función de consulta central o extiende una clase de conector de base de datos (como mysqli), puede ajustar un temporizador alrededor de cualquier consulta síncrona y verificar cuánto tiempo lleva cada una..

También puede hacer una nota de las consultas SQL en sí. De hecho, podrías poner estos dos bits de datos juntos. ¿Y no sería bueno mostrar eso en una tabla bien estructurada??

Bueno, Firebug tiene una estructura de tabla y FirePHPCore también tiene una envoltura para eso:

 

Simón dice:

He echado un par de extras aquí. En el archivo myDb.class.php, si el $ resultado la variable regresa falso, significa que esta consulta falló. Entonces estoy usando FB :: error () para marcar esto como un error en Firebug y mostrarme la consulta, así como FB :: trace () para mostrarme la pila de proceso que conduce a la consulta incorrecta.

La clave aquí es la FB :: tabla () método. Esto hace que la creación de información de depuración estructurada muerte facil.

Ahora, cuando crea una instancia de su clase myDb y ejecuta una consulta, aparece los detalles de esa consulta en una matriz. Luego, accedemos a esa matriz más adelante para crear nuestra tabla FirePHP de todas las consultas que ejecutó para esa solicitud, la duración de cada una y el tiempo total de ejecución de todas las consultas..


Lo que has hecho aquí, con solo unas pocas líneas de código, hubiera sido imposible con solo eco. No puedes esperar obtener algo tan útil en tan poco tiempo. Eso hace que para una rápida depuración.

3) Un depurador AJAX

Usar FirePHPCore para solicitudes AJAX no es diferente a usarlo para solicitudes síncronas. Simplemente usa las funciones como lo harías normalmente. Cuando su aplicación realiza solicitudes AJAX, la información adicional del encabezado de FirePHP llega y la extensión del lado del cliente la procesa en la consola de Firebug. Vamos a intentarlo.

Crear un nuevo archivo llamado ajax.php En la raíz de tu aplicación. Ponga el siguiente código allí:

 

Ahora en tu prueba.php archivo, agregue lo siguiente después de su última llamada a FB :: info ():

 ?>     

Refrescando test.php en Firefox debería mostrarte tu 'Click Me!' botón. Al hacer clic en él, el navegador debe realizar una solicitud AJAX y cargar la respuesta (en este caso, texto sin formato) en el

.


Más importante aún, FirePHP agrega un nuevo nodo a Firebug que nos muestra cualquier mensaje de FirePHP que hayamos iniciado sesión en el archivo ajax.php.

4) Controlador de errores predeterminado

Pegue esto al inicio de su aplicación e incluso desagradables viejos errores de PHP se vuelcan a Firebug!

 set_error_handler ('myErrorHandler'); // Puede agregar los parámetros opcionales $ errfile, $ errline y $ errcontext para obtener una función más detallada myErrorHandler ($ errno, $ errstr) FB :: error ($ errstr, 'Número de error'. $ Errno);  // Continuar con la ejecución normal

Esta es una forma mucho más limpia y segura de reportar errores. Se vuelve aún mejor si demuestra sus aplicaciones a los clientes mientras están en desarrollo (y en riesgo de producir errores no críticos): si no están usando Firefox, con Firebug y FirePHP, no verán esos errores horribles , pero lo harás ... en Firebug. ¡No más cambiar sus niveles de informe de errores solo para mantener las cosas ordenadas! Ahora que es un desarrollo más rápido..


Seguridad

Si bien FirePHP es una excelente herramienta para la depuración durante el desarrollo y las pruebas, no se debe dejar activada cuando una aplicación entra en producción. Potencialmente, puede revelar demasiada información sobre su aplicación, lo que hace la vida aún más fácil para los piratas informáticos..

Por supuesto, si se conecta a un sitio a través de HTTPS, toda la información del encabezado se cifra como estándar. De lo contrario se envía como texto plano..

También agrega una sobrecarga a su aplicación que podría causar una reducción seria en el rendimiento y una mella en su ancho de banda.

Esto me lleva a otro punto importante sobre FirePHPCore: puede dejar el código de FirePHP en su lugar, pero no enviará ningún dato si está deshabilitado o si la cadena de agente de usuario solicitante no contiene la referencia específica de FirePHP.

Si es absolutamente necesario habilitar FirePHP en los sitios de producción, por ejemplo, para la depuración remota, asegúrese de que esté en un interruptor y no olvide apagarlo cuando haya terminado. Algo como:

 define ('DEBUG_MODE', true); FB :: setEnabled (false); if (DEBUG && $ _SESSION ['userIsAdmin']) FB :: setEnabled (true); 

Esto asegura que incluso si su DEBUG_MODE está configurado como 'verdadero' (es decir, 'en'), solo una sesión de administrador autenticado que use un agente de usuario con FirePHP instalado activará el código de depuración y recibirá la información adicional del encabezado.


Conclusión

FirePHP es una herramienta brillante. Se ha encajado perfectamente en mi flujo de trabajo. Debido a que siempre está ahí, conectado a las herramientas que ya utilizo a diario, se ha convertido en una segunda naturaleza para usar.

Más importante aún, ha salvado mi piel más de unas pocas veces. He podido depurar sitios en producción sin tener que eliminarlos. Ha hecho que la depuración de AJAX sea una posibilidad muy real y debido a que es de código abierto y de uso gratuito, el costo de adopción es extremadamente bajo.

Agregue a esto el hecho de que mis aplicaciones ahora son más portátiles, tengo una mejor visión de ellas y aprendí algunos trucos nuevos en el camino, lo que no me gusta?

Cada vez más desarrolladores web utilizan el navegador como su principal herramienta de desarrollo. ¿Y por qué no? Es donde nuestras aplicaciones están destinadas a trabajar. Entonces, de alguna manera, parece más natural poner el perfilado y la depuración directamente en el navegador; donde pasamos la mayor parte de nuestro tiempo depurando de todos modos!

Creo que es hora de dejar de usar eco ¿ahora? Felicitaciones, Super-Dev!


FirePHP fue creado por Christoph Dorn. La versión 0.3.1 es la versión estable actual. La versión 1.0 está en desarrollo y promete algunas características nuevas e interesantes.