Etiqueta: PHPStorm

  • Cómo usar el intérprete de PHP de una VM desde PhpStorm

    Cómo usar el intérprete de PHP de una VM desde PhpStorm

    Una práctica muy buena a la hora de programar (y ahorrarse dolores de cabeza) es el uso de máquinas virtuales.

    Muchos desarrolladores usan este esquema, sin embargo, también es bastante común que tengan sus propias versiones del software usado para ejecutar sus aplicaciones instalado en su máquina física (por ejemplo PHP).

    Si estás trabajando en varios proyectos a la vez, los cuales están deployados en servidores diversos, es muy probable que en cada VM tengas instalada una versión diferente de PHP (La misma que tenés en el servidor de producción), con lo cual, al menos una VM debe tener instalada una versión diferente de PHP que la que tenés instalada en tu máquina.

    Como usás una VM no deberías tener mayores dificultades a la hora de deployar, pero a la hora de desarrollar, también sería bueno que tu IDE estuviese ejecutando la misma versión de PHP que va a dar vida a tu código…

    Una característica muy interesante de mi IDE preferido (PhpStorm) es la posibilidad de analizar el código (mientras lo escribo) usando el intérprete de PHP que está en la VM (y no el que tiene el propio IDE o el que tengo instalado en mi computadora).

    Para configurarlo tenés que ir a la pantalla de settings:

    Y configurar el intérprete de línea de comandos (CLI Interpreter):

    Por defecto vas a ver a la izquierda los intérpretes que tengas instalados en tu computadora, pero podés agregar uno:

    Que puede ser accedido remotamente (Por ejemplo a través de Vagrant).

    Obviamente, para que esto funcione la VM de la que querés sacar el intérprete tiene que estar encendida…

    Y listo, con esto te asegurás de tener un IDE que entienda exactamente la versión de PHP que vas a usar en tu entorno de desarrollo y en producción.

    Si querés ver más detalles podés consultar acá.

  • Cómo hacer debug en php

    Cómo hacer debug en php

    Una de las tareas que más tiempo consume durante el desarrollo de una aplicación (web o no) es el debugging. Ese momento en que estás seguro de que todo anda bien, pero por las dudas… hay que probarlo.

    Y, como siempre, algo no sale exactamente como esperabas.

    Es entonces cuando te toca arremangarte, buscar una nueva taza de café, silenciar el teléfono y hurgar.

    El modo «común» de encarar esta tarea en el universo php es usar mucho la función var_dump (o sus parientes cercanos: print_r, echo, etc…).

    La verdad es que, si bien eso puede funcionar, está bastante lejos de ser óptimo.

    Herramientas de debugging PHP

    Una herramienta que vengo usando hace bastante y que ha sido el día y la noche en mi trabajo es xdebug.

    Se trata de un complemento para php que permite, entre otras cosas:

    • Ejecutar el código paso por paso
    • Evaluar el contenido de las variables en tiempo real
    • Establecer puntos de corte

    Históricamente instalarlo (y dejarlo funcionando!) era una tarea sólo apta para valientes… hoy en día, por suerte, las cosas son mucho más simples.

    Para usarlo de una forma cómoda y práctica necesitarás a su vez un IDE.

    En este caso, te mostraré cómo se hace con PhpStorm pero realmente es muy similar en otros.

    Cómo configurar PHPStorm para usar XDebug

    Desde dentro del IDE podés lanzar tu aplicación usando el botón de play (El triángulo verde):

    Lo que ves a la izquierda (En este caso app.php) es el nombre de la configuración de ejecución (Un concepto propio de PhpStorm que define un poco qué es lo que esperás que haga el IDE cuando hagas click en el botón).

    Lo primero que tenés que conocer entonces es este cuadro de diálogo (Al que accedés al editar la configuración de debugging):

    A la izquierda tenés todas las posibles configuraciones base (Debuggear una aplicación web, un script de CLI, etc…).

    A la derecha los detalles particulares. Lo más importante es configurar correctamente el servidor:

    Dentro de este cuadro tenés que mirar especialmente los campos:

    • Host: El servidor donde está desplegada tu aplicación (Si usás Xampp o algo así será localhost, si no puede ser la IP de la computadora donde esté tu código, dependerá de tu entorno particular el valor que debés ingresar).
    • Port: El puerto donde está escuchando el servidor web al que te vas a conectar (Por lo general será el 80)
    • Debugger: Qué software de debugging usarás (Los estándares son XDebug y Zend Debugger, si no usás ZendFramework te recomiendo usar el primero).

    Qué son los path mappings

    Por último, muy importante es configurar correctamente los mapeos de directorios. Este concepto puede solar un poco extraño al principio, pero es bastante claro: se trata de indicar dónde está, en el sistema de archivos local, el código que se está ejecutando en el servidor.

    Para entenderlo un poco mejor: el código que estás viendo en tu IDE está guardado en tu disco local (salvo que estés editando directamente sobre el servidor, algo que, salvo que uses una máquina virtual sería muy mala idea).

    El código que se ejecuta está en el webserver que tiene instalado el debugger.

    Por eso, para poder ir corriendo paso-a-paso el IDE necesita conocer qué archivo debe mostrar en base a la comunicación con el debugger.

    De eso precisamente es se tratan estos mapeos.

    Una vez terminada esta configuración basta volver a la barra de arriba

    Pero esta vez hacer click en el botón del «bichito» (Bug) y, si todo sale bien, verás una pantalla como esta en la parte de abajo de tu IDE:

    Y ahora se trata sólo de colocar breakpoints en algunos lugares estratégicos del código (Simplemente haciendo click a la izquieda de la línea seleccionada):

     Y recargar la página para que, cuando llegue a este lugar de la ejecución se vea algo como:

    En la parte del código la línea azul marca el código que está a punto de ejecutarse, pero la parte más interesante es la de abajo a la derecha, donde podés ver el contenido de las variables en tiempo real.

    De esta forma podés debuggear tu código sin temer dejar olvidado algún var_dump por ahí.

    ¿Te gustaría ver una sesión de debugging en vivo? Acá hay algo que puede interesarte.

  • Cómo debuggear un comando Symfony usando PhpStorm

    Cómo debuggear un comando Symfony usando PhpStorm

    En este post voy a mostrarte un caso algo particular de cómo debuggear un script que corre por línea de comandos.

    Se trata de debuggear un script hecho con el framework Symfony.

    La particularidad que tiene este escenario es que el código que escibiste (y que querés verificar), no es un archivo php común, si no que es una claseque extiende de ContainerAwareCommand, con lo cual, no es posible invocarla en forma directa.

    La ejecución de este comando requiere del paso por el script bin/console. Ahora, si te fijás su contenido notarás que no es más que un script php, con lo cual, podría ser debuggeado usando la configuración «estándar» de PhpStorm para estos casos…

    La idea en definitiva es simple, cuando ejecutás algo como:

    php bin/console miApp:miComando

    El script php que estás ejecutando es bin/console y «miApp:miComando» no es otra cosa que un argumento de CLI.

    Entonces precisamente, de esa forma es como tenés que configurar el IDE para que pueda ejecutar tu comando (Y puedas ponerle breakpoints, evaluar variables, etc…):

    En este ejemplo, el comando que yo uso (EnviarRecordatorios) recibe parámetros a su vez. Ningún problema, son más argumentos que se le pasan a bin/console.

    ¿De qué otra forma podrías debuggear comandos symfony?

  • Cómo debuggear un script de CLI con XDebug y PhpStorm

    Cómo debuggear un script de CLI con XDebug y PhpStorm

    Es muy común encontrarse con la necesidad de escribir scripts que deberán ser ejecutados por la línea de comandos dentro del contexto de una aplicación web, cronjobs por ejemplo.

    Hasta hace poco tenía muy claro cómo debuggear un script que ejecutaba a través del webserver, pero no había logrado (y francamente, no creía que fuera posible) debuggear un script que corría desde el CLI.

    Buscando un poco (y haciendo algo de prueba y error) finalmente lo logré.

    Si usás PhpStorm (y si no lo hacés aún, te lo recomiendo ampliamente) estos son los pasos que deberás seguir:

    Para empezar, asegurate de tener XDebug o ZendDebugger instalado en el entorno donde vas a correr tu script (En mi caso, usé una máquina virtual que ya tenía todo lo necesario).

    Después, la clave del tema está en el concepto de Run/Debug configuration:

    En este cuadro de diálogo:

    Debés indicar qué archivo vas a querer debuggear y, eventualmente, qué argumentos vas a querer pasarle al script al momento de ejecutar.

    Una vez que tengas la configuración armada… ¡listo! Ya podés ver la ejecución de tu script paso a paso como lo harías con una aplicación web.

    ¿Cómo debuggeas tus scripts?