¿Cómo puedo depurar el proceso de POST de un formulario que se autoprocesa, con Xdebug y NetBeans?

Hoy vamos a resolver un problema muy concreto, debugar el proceso POST de un formulario que se autoprocesa, a través de un ejemplo práctico de la vida real. Este post es la continuación del artículo Configura un entorno de debugging en tu WAMP server con Xdebug, donde vimos cómo poner en marcha el Xdebug en NetBeans.

Se recomienda echar un vistazo al documento Debugging PHP Source Code in the NetBeans IDE para poder seguir este texto cómodamente.

Supondremos que tenemos la suerte de estar desarrollando el website del archiconocido escritor Ken Follet (el autor de los pilares de la Tierra, entre otras muchas superventas). No levantaremos esta app web con ningún framework PHP como pudiera ser Zend, CakePHP o CodeIgniter, por poner algunos ejemplos, sino que la habremos codificado 100% nosotros solitos desde cero patatero, aunque, eso sí, aplicando buenas prácticas de desarrollo de software e implementando patrones de diseño.

Archivos que entran en juego en esta depuración

Imagina que recién hemos terminado el formulario de login de esta aplicación e-commerce del señor Ken Follet, esto es, un formulario que se autoprocesa.

Archivo login.php:

El aspecto tan chulo que tiene este formulario de login es el que muestra la siguiente figura porque estamos utilizando Twitter Bootstrap.

Figura 1. Formulario de login al panel de administración de la tienda de Ken Follet

Por otro lado, imagina que, de momento, tenemos desarrollado el siguiente archivo index.php, cuyo código supongo que puedes seguir sin problema. Como digo, es un Front Controller artesano que hemos desarrollado nosotr@s mism@s, desde cero, y que contiene una lógica de bootstraping para inicializar la aplicación.

Archivo index.php:

Depurando el GET del formulario de login

Pues bien, llegados aquí, cabe señalar que antes de depurar el POST del formulario que se autoprocesa, primero tenemos que depurar el GET, puesto que no podemos llegar al POST sin haber pasado antes por el GET. Hay pues que seguir los pasos siguientes.

Paso 1. Ve a Run > Set Project Configuration > Customize… y escribe el URL http://kenfollet.local/admin/login en el campo Project URL.

Figura 2. Introduce el URL que quieres depurar

Paso 2. Asegúrate de tener abiertos en tu NetBeans los dos archivos involucrados en esta depuración: index.php y login.php

Paso 3. Ahora ve a login.php y pon un breakpoint en la línea que hace la redirección al panel de administración, en el POST, cuando el formulario que se autoprocesa comprueba que las credenciales del usuario están bien. Esto es para quedarnos ahí, en ese estado, y poder observar el valor de la sesión en el POST. ¡Eso es lo que queremos hacer en este ejercicio!:

Paso 4. Inicia una sesión de depuración mediante un Debug Project (kenfollet) (Ctrl+F5)

Ahora cuando inicies una nueva sesión de debugging con los parámetros de entrada anteriores, en el index.php tiene que salirte algo como lo siguiente, puesto que es el primer script involucrado en el flujo de login:

Figura 3. Current Program Counter en la línea include_once ‘configs/config.php’; de index.php

Además, al iniciar la nueva sesión de debugging, el NetBeans abre una pestaña nueva en el navegador, en blanco, con este URL: kenfollet.local/admin/login?XDEBUG_SESSION_START=netbeans-xdebug. Esto es porque el debugger está esperando a que empieces a desplazar el Current Program Pointer por el programa.

Figura 4. Pestaña en blanco que va respondiendo a la evolución del Current Program Counter

Ahora tenemos que ir ejecutando con el debugger la primera petición GET del formulario que se autoprocesa hasta ver pintado el HTML del formulario de login en la nueva pestaña kenfollet.local/admin/login?XDEBUG_SESSION_START=netbeans-xdebug, la que al inicio del proceso de debugging está en blanco.

Figura 5. Hay que llevar el Current Program Pointer al final de index.php con el botón Step Over (F8)

Cuando hayas depurado el index.php por primera vez en su totalidad, entonces la pestaña del navegador mostrará el formulario HTML renderizado, es decir, la 1ª petición GET kenfollet.local/admin/login?XDEBUG_SESSION_START=netbeans-xdebug.

Depurando el POST del formulario de login

Este es el momento de continuar con el proceso de depuración para pasar al estado POST de nuestro formulario que se autoprocesa. Lógicamente, en este paso es donde hay que poner las credenciales de usuario autenticado.

Figura 6. Hay que enviar las credenciales del usuario al URL http://kenfollet.local/admin/login?XDEBUG_SESSION_START=netbeans-xdebug

Figura 7. Y de nuevo, el Current Program Counter se situará al comienzo de todo, en la línea include_once ‘configs/config.php’; de index.php

Sin embargo, esta vez, al continuar la depuración con Step Over (F8), como estamos en el estado POST, por así decirlo, llegaremos finalmente al Breakpoint de login.php que definimos en el paso 3. Y podremos ver cómodamente en el IDE el estado de las variables en ese momento de la ejecución del script.

Figura 8. Variables cargadas en la memoria cuando llegamos al Breakpoint definido en el paso 3, en el archivo login.php

1 comentario

¿Me dejas un comentario? ¡Gracias!

Deja un comentario

Los campos obligatorios están marcados con *