JTagua

Inicio » XDEBUG » Debug en PHP 5 con NetBeans 6.7 (Windows)

Debug en PHP 5 con NetBeans 6.7 (Windows)

Licencia

Creative Commons License

Visitas:

  • 748,872 hits
Anuncios

REQUISITO PREVIO: NetBeans 6.7

Para poder depurar (hacer debug) en un programa escrito en PHP con NetBeans se requiere, como es obvio, como requisito previo , tener instalado NetBeans (en mi caso es NetBeans 6.7) con el plugin de PHP. (Ver entradas en el blog).

PRIMERA PARTE: Servidor HTTP e intérprete PHP.

Después, se necesita en primer lugar,  Apache HTTP Server y el intérprete PHP. Como es natural, si se desea trabajar con bases de datos, será necesario instalar un gestor de bases de datos, por ejemplo MySQL.

Existe un instalador llamado XAMPP,  que en su versión 1.7.1  contiene los siguientes elementos:

  • Apache HTTPD 2.2.11 + Openssl 0.9.8i
  • MySQL 5.1.33
  • PHP 5.2.9
  • phpMyAdmin 3.1.3.1
  • XAMPP CLI Bundle 1.3
  • FileZilla FTP Server 0.9.31
  • Mercury Mail Transport System 4.62

Los tres primeros componentes son necesarios si se desea desarrollar con PHP desde el IDE de NetBeans. Para administrar MySQL, puede usarse phpMyAdmin, sin embargo, yo prefiero las herramientas administrativas de MySQL originales, es decir, MySQL Workbench. (Ver entradas en el blog).

Como es lógico, si se desea depurar programas escritos en PHP en tiempo real tendremos que utilizar, entre otros, XDebug.

Para descargar XAMPP, vamos a la página principal arriba indicada

Image1

localizamos la descarga de Windows,

Image2

Seleccionamos y,

Image3

Hacemos click es Download /  XAMPP y aparecerá

Image3

Vemos que en esta pantalla existen varias versiones, nosotros vamos a elegir el paquete básico en su opción “Installer”. Esta opción nos permitirá disponer de unos ficheros de configuración httpd.conf, php.ini y my.ini perfectamente sincronizados para que funcionen simultaneamente Apache 2.2.11, MySQL 5.1.33 y PHP 5.2.9. (A veces, no resulta tan fácil instalar los componentes por separado y modificar convenientemente los tres ficheros de configuración). Esta forma de proceder nos hace dependientes de XAMMP, ya que generalmente no coinciden las últimas versiones de los tres productos. No podemos pues elegir nosotros una combinación específica de versiones.

Una vez descargado y guardado el archivo

Image4

hacemos para ejecutar doble click y aparecerá

Image5

Si hacemos ahora click en Ejecutar,

Image6

Como vemos el primer cuadro de diálogo nos permite elegir el lenguaje: Inglés y Alemán. Si hacemos OK

Image7

Si ahora hacemos Next,

Image8

Esta pantalla nos permite seleccionar la carpeta de destino de la instalación raiz de XAMPP desde donde se descargarán todos los componentes. Si hacemos Next,

Image9

Desde la pantalla anterior, una opción minima sería establecer Apache y MySQL como un servicio. Es decir

Image10

Hacemos ahora Install

Image11

El instalador comenzará su trabajo y cuando termine

Image12

Hacemos Finish y comenzará el arranque de los servicios, en el caso de que todo esté bien

Image13Aceptamos finalmente,

Image14

Contestamos que sí, y aparecerá el panel de control

Image15

Desde este panel podemos entre otros procedimientos arrancar o parar los distintos servicios, fundamentalmente Apache HTTP Server y MySQL.

Por otro lado, si el servidor HTTP de Apache está correctamente arrancado y en servicio desde “Admin” podremos ver la página

Image16

Si ahora seleccionamos “Estado”

Image17

En condiciones normales MySQL tendría que estar activado, no ocurre así porque yo ya tenía montado MySQL con un root con “password” y la configuración de XAMPP no tiene previsto esto. También podemos notar esto si en la pantalla anterior elegimos phpMyAdmin, veremos

Image18

Para solventar esto, iniciamos una sesión de Netbeans y abrimos el archivo config.inc.php que se encuentra en c:/xammp/phpMyAdmin

Image19

Vemos que en las líneas 20 y 21 se establece el user root con su password. Si se ha montado previamente MySQL y se le ha asignado un  password éste tiene que ser expresado en la línea 21. También tenemos que cambiar las líneas 25 y 26 para permitir acceder a posibles bases de datos existentes a través de PhpMyAdmin.

Cambiamos ahora las instrucciones 21, 22 y 26  según proceda,

Image20

interrumpimos el servicio de Apache y MySQL desde el panel de control de XAMMP y volvemos a iniciarlos. Una vez iniciados los dos servicios, hacemos click en Admin asociado a Apache, aparecerá la página de gestión de XAMMP y si seleccionamos phpMyAdmin y aparecerá

Image21

Pantalla que nos permite gestionar las distintas tablas de las bases de datos MySQL ya existentes.

La ejecución de las distintas demos que incorpora XAMMP no es posible ejecutarlas a menos que cambiemos el usuario y password asociado a la base de datos, es decir, si intentamos ejecutar desde la pantalla principal de gestión de XAMMP la demo “Administración de CD”, ocurrirá lo siguiente: (En mi caso el usuario root tiene password).

Image22

Para resolver esto, abrimos el archivo cds.php con Netbeans y localizamos las instrucciones 17 y 77 . Allí colocaremos el valor del password asignado al root como tercer parámetro de la instrucción

mysql_connect(“localhost”,”root”,””);

es decir

mysql_connect(“localhost”,”root”,”valor password de root”);

Guardamos y ejecutamos de nuevo,

Image23

Finalmente, y aunque no es tan crítico cuando se desarrolla, es conveniente revisar el chequeo de seguridad.

Image24

Para cerrar los posibles agujeros de seguridad utilizaremos el programa http://localhost/security/xamppsecurity.php.

SEGUNDA PARTE: Configuración de XDebug.

Existe una tarea fundamental en el desarrollo de aplicaciones y es la depuración. Cuando se desarrolla en PHP, yo prefiero incorporar como herramienta de desarrollo XDebug, este depurador permite hacer un control exhaustivo de los errores que se produzcan en nuestra aplicación.

Tienes toda la información en la página oficial de  Debug.

Una vez instalado PHP hay que indicar en el fichero de configuración php.ini dos cosas:

1) Dónde se encuentra la ruta a la librería xdebug, y establercer ciertos parámetros para depurar con XDebug, además tenemos que desactivar la depuración a través de Zend, ya que XDebug es incompatible con las extensiones de Zend Optimizer y Zend Studio Debugger

Para ello, abrimos una sesión de Netbeans y hacemos click en Archivo/Abrir Archivo, localizamos el archivo php.ini que se encuentra en la carpeta de instslación de XAMMP, en mi caso C:/XAMMP/PHP, localizamos el grupos de instrucciones

Image26

y las comerntamos todas, es decir

Image27

localizamos ahora el bloque de instrucciones,

Image28

y lo modificamos “descomentando” las instrucciones,  de esta forma tendremos

Image29

2) También hay que habilitar PHP para mostrar errores mediante la directiva display_errors.

En la línea 299,

Image30

Nos aseguramos que la directiva display_errors está en On.

Guardamos, cerramos el archivo php.ini y detenemos los servicios desde el panel de control de XAMMP para arrancar de nuevo.

Para comprobar que PHP está listo para interpretar XDebug, pulsamos “Admin” en el panel de control de XAMPP y desde allí hacemos phpInfo(), aparecerá un extenso cuadro de parámetros de la configuración de PHP. Tendrá que aparecer uno con el título xDebug similar al que sigue:

Image31

PARTE FINAL

Comprobaremos ahora cómo funciona XDebug para un programa fuente PHP en el entorno integrado Netbeans.

Iniciamos Netbeans y hacemos Archivo/Proyecto nuevo

Image32

Seleccionamos en categoría “PHP” y en proyecto “PHP Application”, hacemos Siguiente,

Image33

Cambiamos el nombre del proyecto a PHPDebug0, y pulsamos siguiente

Image34

y finalmente Terminar. El IDE crea un nuevo proyecto con un archivo index.php prototipo y que nosotros cambiaremos inmediatamente.

Copie , o mejor, reemplaze, todo el código de index.php por este otro:

HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">NetBeans PHP debugging sample

	<!--?php
  	$m=5;
  	$n=10;
  	  $sum_of_factorials = calculate_sum_of_factorials ($m, $n);
  	  echo "The sum of factorials of the entered integers is " . $sum_of_factorials;

	    function calculate_sum_of_factorials ($argument1, $argument2) {
  	 	$factorial1 = calculate_factorial ($argument1);
  	 	$factorial2 = calculate_factorial ($argument2);
  	 	$result = calculate_sum ($factorial1, $factorial2);
  	 	return $result;
  		}

	  function calculate_factorial ($argument) {
  	  	$factorial_result = 1;
  	 	for ($i=1; $i

Una vez copiado, guárdelo, (haga click con el botón derecho sobre la pestaña del archivo), tendrá que tener una apariencia parecida a esta:

Image35

Coloque ahora un “punto de interrupción” en el comienzo del bloque php, es decir, en la línea 8. Para hacer esto sitúe el apuntadpr del ratón a la izquierda del número de línea y haga click. También puede hacer Crtl-F8. Aparecerán dos indicadores, un rectángulo rojo a la izquierda del número de instrucción y además la propia linea se escribirá en fondo rojo.

Inicie el programa en modo depuración haciendo click en el icono

debug-main-project-button

ignore el cuadro de diálogo

Image36

haciendo “Depurar”,comenzará la ejecución del programa y se detendrá justo en la línea 8. Para ver esto, compruebe que el navegador parece que está intentando cargar la página sin embargo, no lo hace. Esto ocurre porque aún no se ha ejecutado el programa. El programa está detenido en el punto de interrupción y aún no ha producido nada que tenga que enviarse al cliente o al navegador.

Vuelva a Netbeans y comprobará que la instrucción número 8 está ahora en verde. Esto quiere decir que el programa está detenido en ese punto.

Presione ahora F7 tres veces o haga click en el icono

pasoapasoF7La línea 11 llamará a la suma de valor del factorial m=5 y n=10

Antes de continuar compruebe que si sitúa el apuntador del ratón sobre la variable $m o la variable $n aparecerá su valor actual en una caja junto al apuntador del ratón. También puede desplegar la pestaña “Variables” para comprobar los valores de las variables. Es decir,

Image37

Pulse ahora F7, el control del programa pasa a function calculate_sum_of_factorials. Observe que se han creado dos nuevas variables denominadas argument1 y argument2 con los valores de 5 y 10 respectivamente.

Haga de nuevo F7 , inmediatamente el control del programa pasa a function calculate_factorial ($argument). Repita f7 hasta que termine de ser evaluada la función, compruebe que en cada lazo del bucle la variable de control de dicho bucle se incrementa de unidad en unidad.

Siga haciendo F7 hasta que termine el segundo factorial. Compruebe haciendo F7 repetidas veces, que finalmente el control del programa ejecuta la suma de los dos factoriales.

Siga haciendo F7 hasta que termine el programa, en ese momento aparecerá en el navegador

The sum of factorials of the entered integers is 3628920

Como vemos es muy sencillo seguir el valor de las variables en una operación de depuración.

En el caso de programas mas complicados, para los que no necesitamos ir paso a paso, podemos situar distintos puntos de interrupción en el programa o programas , e incluso saltar las funciones.

Si hacemos Crtl-F/ (Ejecutar y salir), el control del programa no se desplazará paso a paso, en este caso el control del programa se ejecutará hasta encontrar otro breakpoint o punto de interrupción.

Anuncios

18 comentarios

  1. esr dice:

    Muy buen tutorial

  2. jairo dice:

    Que Dios le de mas

  3. Eder dice:

    GraCIASviej…Excelente

  4. Germanux dice:

    Increible, un tutorial estupendo. Muchas gracias

  5. palotex dice:

    Muy bueno sigue asi amigo que sabes mucho de informatica

  6. vikingo710 dice:

    El mejor turotial para configurar netbeans con xampp

    Muchas gracias!!

  7. Mikesilver dice:

    y en Mac? no encuentro el interprete php, tengo el leopard que se supone viene con el apache y el php 5 por default, pero no se que archivo selecionar en el netbeans xD me ayudan? mik3.silv3r@live.com.mx

  8. Fernanda Lugo dice:

    Tenia meses tratando de hacer funcionar el xdebug y no lo habia logrado.

    Necesitaba tu guia realmente. Muchas gracias de verdad

    Saludos

  9. EdgarBG dice:

    Que grande.
    Lenguaje simple, ejemplos sencillos y capturas; todo autodescriptivo. Así debe ser un tutorial. Muchas gracias, saludos.

  10. su dice:

    hola, si estoy depurando un proyecto que hace muchos movimientos, como se cual fue el ultimo codigo que depuro?

  11. Fidel dice:

    Muchas gracias por el tutorial me servira de mucho

  12. Victor Segura Lucas dice:

    Hola que tal, excelente documental, pero habría alguna forma de usar solo el servido apache para poder compilar solamente página php?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s

A %d blogueros les gusta esto: