Un tool essenziale per lo sviluppatore PHP è certamente XDebug.
In questo articolo spiego come installarlo e configurarlo su una macchina virtuale VirtualBox, OpenSuse Guest e OsX host.
Prima di accendere la macchina virtuale diciamo al nostro Mac e a Virtualbox di ascoltare sulla porta 9000 della macchina virtuale.
Dal terminale di OSX digitiamo quindi i seguenti tre comandi (supponendo che la macchina virtuale si chiami “LAMP Server”)
1 2 3 | $ VBoxManage setextradata "LAMP Server" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/xdebug/Protocol" TCP $ VBoxManage setextradata "LAMP Server" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/xdebug/GuestPort" 9000 $ VBoxManage setextradata "LAMP Server" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/xdebug/HostPort" 9000 |
Controlliamo ora che tutti i parametri siano configurati
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ VBoxManage getextradata "LAMP Server" enumerate Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort, Value: 80 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort, Value: 8888 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol, Value: TCP Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/mysql/GuestPort, Value: 3306 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/mysql/HostPort, Value: 3306 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/mysql/Protocol, Value: TCP Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort, Value: 22 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort, Value: 2222 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol, Value: TCP Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/xdebug/GuestPort, Value: 9000 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/xdebug/HostPort, Value: 9000 Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/xdebug/Protocol, Value: TCP |
Fatto questo ora possiamo accendere la macchina virtuale e iniziare a configurare la macchina guest.
Per installare XDebug occorre prima installare PHP PECL, quindi dalla console della macchina virtuale Linux digitiamo
1 | $ yast -i php5-devel |
e installiamo, accettando eventuali richieste di risoluzione dipendenze.
Fatto questo effettuiamo eventuali aggiornamenti dei canali digitando
1 | $ pecl update-channels |
Ora installiamo XDebug
1 | $ pecl install xdebug |
Finita l’installazione, passiamo alla configurazione.
Creiamo il file xdebug.ini in /etc/php5/conf.d
1 | $ touch /etc/php5/conf.d/xdebug.ini |
e all’interno scriviamo il seguente codice
1 2 3 4 5 6 7 8 9 10 11 12 | [xdebug] xdebug.default_enable=1 xdebug.cli_color =1 xdebug.remote_enable=1 xdebug.remote_connect_back=1 xdebug.remote_port=9000 xdebug.remote_autostart=1 xdebug.idekey="PHPSTORM" zend_extension = "/usr/lib/php5/extensions/xdebug.so" |
Riavviamo quindi il server web e controlliamo che xdebug sia effettivamente caricato. Aprendo un file phpinfo.php con il browser e scrivendo la funzione phpinfo(); dovremo vedere un blocco simile a questo (subito prima di PHP CREDITS) dove compare la dicitura with Xdebug v.2.2.3 etc.
L’ide che utilizzo è PHPSTORM ed è per questo che il valore del parametro xdebug.idekey è PHPSTORM.
Riavviamo quindi il server apache
1 | sudo /etc/init.d/apache2 restart |
Fatto questo xdebug dovrebbe essere funzionante, testatelo con il vostro IDE, in ascolto sulla porta 9000.
Holevo provare ad utilizzare il mio macbook pro + phpstorm con il mio server remoto dove ho dei progetti “testing” scritti in php + myql.
Ho installato sul server debian xdebug, e l’ho configurato senza tproblemi in qualche minuto (come hai fatto te).
La IDE non ne vuol sapere di funzionare … Ho seguito i passi di “Zero Configuration debbugging” (http://blog.jetbrains.com/webide/2011/02/zero-configuration-debugging-with-xdebug-and-phpstorm-2-0/), ma senza risultati.
Lo scenario è simile al tuo, se non per il fatto che il mio server si trova in remoto (ergo ha un IP pubblico), ma posso agire sul router per avere
la porta 9000 del mio macbook visibile all’esterno della LAN
Domanda: Pensi sia un problema di networking, e quindi di protocolli che fanno le bizze, oppure una configurazione mal gestita da PHPStorm ?
PS bdw, mi diresti come hai configurato phpstom (Run -> Edit configuration)
Ciao, se hai scritto l’xdebug.ini come il mio, XDebug (come spiega qui http://xdebug.org/docs/remote ) è in ascolto sulla porta 9000 da un ip sconosciuto (xdebug.remote_connect_back=1) e quindi dovrebbe andare.
Ho lasciato la configurazione di default di phpstorm aggiungendo semplicemente i bookmarks al broswser. Sei certo di avere XDebug attivo sul server? Ho aggiornato l’articolo mettendo uno screenshot di quello che dovresti vedere. La prima volta che l’ho installato ero sicuro che tutto fosse andato per il verso giusto e invece XDebug non era stato caricato (se pure installato).
Si, anche a me è venuto da pensare ad un problema sul server, ma poi ho visto che le connessioni cerano, quindi mi sono focalizzato sul
lato client. il protocollo DBGP che viene generato sulle porte 9000 è bidirezionale, ma è il server che effettua la connessione.
Comunque, grazie per la risposta.
[SOLVED]
Il server sul quale gira XDebug, effettua delle connessioni tramite protocollo DBGP sulla IDE di sviluppo, nel mio caso PHPStorm,
quindi il server cerca di contattare la macchina sulla quale verrà effettutato il debug. Se la macchina si trova in una LAN, ed il server
in questione si trova su Internet (oppure in una LAN, con un segmento di rete, che non appartiene al vostro), tale comunicazione non potrà
essere effettuata previa modifica della tabella di routing oppure tramite un proxy.
Io ho modificato la routing table, in modo da redirigere ogni tentativo di collegamento sulla porta 9000 (quella di default di XDebug) verso l’IP
(che il DHCP offre al in modo univoco) del mio portatile.