Premessa:
Non programmo da molto tempo in php ma appena ho cominciato, provenendo dal mondo java, ho avvertito subito l’esigenza di uno strumento in grado di effettuare il debug delle mie applicazioni web nel modo più completo e amichevole possibile. In realtà il php offre già alcuni strumenti per il debug come ad esempio la function var_dump() ma per avere uno strumento che faccia un debug dettagliato, seguendo passo passo lo stato dell’applicazione durante la sua esecuzione e dando la possibilità di visualizzare quindi lo stato delle variabili coinvolte, bisogna ricorrere a IDE (Integrated Development Environment) più sofisticati e commerciali come Zend Studio. Oppure se si usano editor di sviluppo come l’Eclipse PDT (Php Development Tools) bisogna trovare il plugin opportuno e configurarselo da sé, cosa purtroppo non semplicissima.
Dopo aver cercato tutorial qua e là e aver letto qualche guida più o meno comprensibile sono finalmente riuscito a configurare un debugger decente che mi permettesse di lavorare in modo più efficiente. Il debugger in questione è un’estensione per php che si chiama X-debug, sito ufficiale http://xdebug.org/. Vediamo come configurarlo in Eclipse all’interno del sistema operativo di Ubuntu linux.

Requisiti:
Innanzi tutto, occorre avere un ambiente LAMP installato e funzionante. Per installarlo su Ubuntu, dalla versione 10.04 a scendere, basta andare nel gestore dei pacchetti Synaptic, selezionare “Modifica” → “Marca i pacchetti per attività” → mettere il segno di spunta su “LAMP server”, dare tutte le opportune conferme e installare. Nella versione attuale, Maverick Meerkat 10.10, occorre invece prima installare un softwarino che permette di fare più o meno le stesse cose. Qui c’è una breve guida su come fare: www.chimerarevo.com. Se doveste avere problemi nella configurazione di MySql qui c’è un mio post in cui dicevo brevemente come configurarlo: Configura MySql. Occorre poi il programma Eclipse PDT che è possibile reperire da questo link: http://www.eclipse.org/downloads/. Io personalmente utilizzo la versione Galileo in quanto con la Helios ho avuto una serie di problemi di compatibilità con la jdk installata.
Per finire occorre che Eclipse consideri come workspace la root di Apache, ossia “/var/www”, basta quindi indicarla all’avvio del programma. Per comodità io ho cambiato il proprietario della cartella in questione da root al mio utente, con il comando:

# sudo chown renzo:renzo -R /var/www

Basterà, nel caso vogliate farlo anche voi, sostituire il nome del mio utente con il vostro.

Bene, possiamo cominciare.
Installiamo i pacchetti php5-xdebug, php5-dev e php-pear dai repositories di Ubuntu oppure con il comando:

# sudo apt-get install php-pear && sudo apt-get install php5-dev && sudo apt-get install php5-xdebug

Apriamo il file xdebug.ini con il comando:

# sudo gedit /etc/php5/apache2/conf.d/xdebug.ini

dove noteremo subito la presenza della riga “zend_extension=/usr/lib/php5/20090626/xdebug.so” che si riferisce al’estensione appena installata e aggiungiamo le seguenti righe che identificano la root del nostro server:

xdebug.remote_enable=On
xdebug.remote_host=”localhost”
xdebug.remote_port=9000
xdebug.remote_handler=”dbgp”

Immagine file xdebug.ini

Fatto ciò riavviamo il server Apache con il comando:

# sudo /etc/init.d/apache2 restart

Con il comando

# php -i | grep xdebug

possiamo vedere le impostazioni che riguardano x-debug.

Immagine di xdebug su console

Inoltre se non ne disponiamo già creiamo un file info.php nella root di Apache (in genere “/var/www”) con con le seguenti righe:

Immagine file phpinfo

Aprendo il browser all’indirizzo http://localhost/info.php vedremo la presenza del riquadro xdebug e la versione correntemente installata.

Immagine xdebug su server

Ora finalmente possiamo passare alla configurazione di x-debug all’interno di Eclipse. A programma avviato andiamo in Window -> Preferences -> PHP -> Debug e impostiamo i campi “PHP Debugger: XDebug”, “Server: Default PHP Web Server”, “PHP Executable:” va aggiunto cliccando su PHP Executables… -> Add e diamo in “Executable path” il percorso dell’eseguibile php che solitamente è /usr/bin/php5, possiamo identificarlo dando nel terminale:

# which php5

Immagine configurazione Eclipse 1

In “Name” mettiamo xdebug, in “PHP ini file” diamo il percorso /etc/php5/apache2/php.ini, controlliamo che sia corretto dando nel terminale:

# locate php.ini

In “SAPI Type” diamo CLI e come “PHP debugger” diamo XDebug. Clicchiamo su Finish.

Immagine configurazione Eclipse 2

Tornando alla scheda di “PHP Debug” ora possiamo trovare nel campo “PHP Executable” la voce “xdebug” appena aggiunta. Selezioniamola e diamo ok.

Immagine configurazione Eclipse 3

Infine in Debug -> Workbench Options alla voce “allow multiple debug sessions” selezionare “Never” in quanto xdebug non supporta le sessioni multiple.

Immagine configurazione Eclipse 4

Fatto ciò non resta che impostare il browser con cui effettuare il debug.
Sempre nella scheda “Preferences”, esplodiamo la voce “General” e selezioniamo “Web Browser”. Qui selezioniamo new e diamo a “Name” e “Location” i valori “Firefox” e “/usr/bin/firefox”, il percorso di firefox lo possiamo trovare col comando:

# which firefox

Immagine configurazione Eclipse 5

Diamo ok.
Selezioniamo la checkbox “Use external Web browser” quindi “Firefox” e diamo Apply e ok.

Immagine configurazione Eclipse 6

Adesso dovremmo essere in grado di effettuare il debug delle nostre applicazioni. Se non l’abbiamo, creiamo in Eclipse una web application selezionando File -> New -> PHP Project.

Immagine nuovo Progetto Eclipse

Creiamo una index.php con qualche riga di codice e aggiungiamo un break point sulla prima riga.

Immagine impostazione checkpoint xdebug

Adesso selezioniamo la freccina sull’icona dello scarafaggio e scegliamo Debug As -> PHP Web Page.

Immagine di xdebug in esecuzione

Confermiamo il percorso della pagina nella finestra che compare e diamo “Yes” quando verrà chiesto di aprire la Perspective di PHP Debug.

Immagine conferma url per xdebug





Immagine cambio prospettiva xdebug

Cliccando sul tasto “Step Over” della prospettiva PHP Debug possiamo scorrere le variabili via via implicate e verificarne lo stato,

Immagine step by step xdebug





Immagine stato variabile xdebug

mentre il browser verrà aperto da xdebug e messo in attesa fino all’ultimo step che stamperà l’output dell’applicazione.

Immagine output nel browser Firefox

NOTA:
Attenzione a dare il percorso giusto della pagina su cui effettuare il debug, infatti X-Debug considererà come root la cartella di Apache(/var/www). La cartella /var/www deve inoltre avere tutti i permessi(777), infatti Eclipse dovrà accedere anche in scrittura per i suoi metadati. Per quanto riguarda i progetti vanno bene i permessi 755 in quanto al browser occorre solo leggere i files.