Cómo configurar un entorno de depuración local en PHP

Recientemente comencé a centrarme más en PHP y necesitaba configurar un entorno de depuración local. Como no hay muchos tutoriales sobre cómo hacerlo, me he encontrado con algunos problemas sobre cómo configurar y ejecutar.

Combinando algunos tutoriales y pasando unas horas en varios foros, se me ocurrió este texto. La aplicación en la que estoy trabajando se ejecuta dentro de una caja Vagrant que de alguna manera es inestable. Se colapsa de vez en cuando, así que tengo que rehacer esta configuración y, por lo tanto, sé que funciona :).

El objetivo de este tutorial es hacer que Xdebug funcione en su servidor y luego apuntar PhpStorm a Xdebug.

Empecemos.

Prerrequisitos

Si no tiene Xdebug instalado en su servidor pero está usando PHP7, puede hacerlo usando las Instrucciones de instalación personalizadas del sitio oficial de Xdebug aquí.

Sin embargo, como mi proyecto usa PHP5, tuve que hacerlo a la antigua usanza: buscándolo en foros .

En este tutorial, asumiré que tiene Xdebug instalado.

Empezando

Primero necesita encontrar la ubicación del archivo xdebug.so en su servidor. Copie la ubicación en algún lugar, ya que la usará más adelante.

locate xdebug.so

Ahora necesita navegar dentro de su servidor a una ubicación: /etc/php5/apache2/conf.d/ y verificar si el archivo 20-xdebug.ini existe allí. Si no existe, cree uno. Puede crear uno usando comandos como touch, vim, vi, nano, etc.

Puede ver que mi proyecto está hecho en PHP5, así que cambie el nombre / ubicación de su carpeta de acuerdo con su versión de PHP.

Ahora abra el archivo 20-xdebug.ini y péguelo en:

zend_extension=”location to your xdebug.so file” xdebug.remote_enable=1 xdebug.remote_port=9000 xdebug.remote_host=”your localhost address” xdebug.remote_autostart=1 xdebug.remote_connect_back=0 xdebug.remote_handler=”dbgp” xdebug.remote_mode=req xdebug.remote_cookie_expire_time=-9999 xdebug.remote_log=”/tmp/xdebug.log” xdebug.var_display_max_depth=15 xdebug.profiler_enable=0 xdebug.idekey=”phpstorm”

A partir de la explicación del archivo 20-xdebug.ini que se escribe a continuación, verá que algunas de estas configuraciones no son necesarias o que están establecidas en un valor predeterminado. Guardo estos valores en el archivo 20-xdebug.ini porque es bueno conocerlos.

Explicación del archivo 20-xdebug.ini:

  • xdebug.remote_enable: controla si Xdebug debe intentar ponerse en contacto con un cliente de depuración que está escuchando en el host y el puerto según lo establecido en la configuración
  • xdebug.remote_port: el puerto al que Xdebug intenta conectarse en el host remoto. El valor predeterminado es 9000.
  • xdebug.remote_host: selecciona el host donde se ejecuta el cliente de depuración. El valor predeterminado es localhost.
  • xdebug.remote_autostart: cuando esta configuración se establece en 1, Xdebug intentará iniciar una sesión de depuración remota e intentará conectarse a un cliente.
  • xdebug.remote_connect_back: si está habilitado, la configuración xdebug.remote_host se ignora y Xdebug intentará conectarse con el cliente que realizó la solicitud HTTP. El valor predeterminado es 0.
  • xdebug. El protocolo DBGp es el único protocolo compatible. El valor predeterminado es dbgp.
  • xdebug.remote_mode: selecciona cuándo se inicia una conexión de depuración. Esta configuración puede tener dos valores diferentes: req: Xdebug intentará conectarse al cliente de depuración tan pronto como se inicie el script. jit: Xdebug solo intentará conectarse al cliente de depuración tan pronto como se produzca una condición de error.
  • xdebug.remote_cookie_expire_time: esta configuración se puede usar para aumentar (o disminuir) el tiempo que la sesión de depuración remota permanece activa a través de la cookie de sesión. El valor predeterminado es 3600.
  • xdebug.remote_log: si se establece en un valor, se usa como nombre de archivo para un archivo en el que se registran todas las comunicaciones del depurador remoto.
  • xdebug.var_display_max_depth: controla cuántos niveles anidados de elementos de matriz y propiedades de objeto hay cuando las variables se muestran con xdebug_var_dump (), xdebug.show_local_vars o mediante los seguimientos de funciones. El valor predeterminado es 3.
  • xdebug.profiler_enable: habilita el generador de perfiles de Xdebug, que crea archivos en el directorio de salida del perfil. El valor predeterminado es 0.
  • xdebug.idekey: controla qué clave IDE Xdebug debe pasar al controlador del depurador DBGp. El valor predeterminado se basa en la configuración del entorno.

Guarde el archivo y reinicie el servidor Apache:

sudo service apache2 restart

Xdebug y PhpStorm

Primero debe abrir PhpStorm y seleccionar Ejecutar> Editar configuración. Allí debe seleccionar + (Agregar nueva configuración) y elegir "PHP Remote Debug".

Cambie el nombre de la configuración de "Sin nombre" a otro. Elegí el nombre "Tutorial" por razones obvias;) Luego marque la opción "Filtrar la conexión de depuración por clave IDE".

Seleccione el botón Servidores (…) y luego seleccione + (Agregar nuevo servidor).

  • Cambie el nombre de su servidor por algo más relajante. Elegí "localbackend1" en este ejemplo.
  • En el campo Host, escriba su localhost. Establezca Debugger en Xdebug.
  • Seleccione "Usar mapeo de ruta" y apunte a la carpeta de su aplicación.

Haga clic en Aplicar. Volverá a la ventana anterior donde verá que la clave IDE es editable y ahora debe ingresar una clave. Siempre pongo “phpstorm” o algo similar.

Notará que la clave IDE "phpstorm" ya está en su archivo 20-xdebug.ini:

xdebug.idekey=”phpstorm”

También debe seleccionar Solo instancia única, ya que evitará que lance más de una instancia del mismo proyecto.

Haga clic en Aplicar y ¡voilà!

¡Ha terminado con la configuración!

Prueba y finalización

Ahora estás completo. Debería ver la configuración del Tutorial que creamos en la esquina superior derecha de PhpStorm.

Puede probarlo estableciendo un punto de interrupción en su proyecto. Haga clic en el botón "error" en la ventana de configuración del Tutorial y luego ejecute su aplicación.

Eso debería ser todo, si todo está bien, debería llegar al punto de ruptura.

Y recuerde, nada supera la sensación de ver los valores de tiempo de ejecución durante la depuración.

¡Gracias por leer! Vea más artículos como este y otras cosas divertidas que hago en mi perfil de Github: //github.com/GoranAviani