Remote PHP (Web + CLI) Debug mit Netbeans

In diesem Artikel möchte ich kurz zeigen, wie meine lokale Entwicklungsumgebung für PHP eingerichtet ist, und wie man entfernte (auf einer VM liegende) PHP-Skripte auch über das CLI in Netbeans debuggen kann.

Server (VM) einrichten

Unter Windows nutze ich eine virtuelle Maschine (via Virtualbox), auf der die Ubuntu Server Edition läuft. Dank VBoxHeadlessTray kann die VM bequem beim Bootvorgang mit gestartet werden und stört nicht weiter.

Auf dem Server läuft:

sudo apt-get install apache2 apache2-utils libapache2-mod-php5 mysql-server php5 php5-cli php5-common php5-curl php5-gd php5-imagick php5-mcrypt php5-mysql php5-xdebug phpmyadmin ntp samba samba-common screen vim subversion git

Samba konfigurieren

Samba ist zwar nicht optimal als Dateisystem, mit diesen Einstellungen (/etc/samba/smb.conf) und wenn die VM auf einer SSD-Platte liegt aber durchaus auf 40-60 MB/s und geringe Latenzzeiten zu bringen:

    workgroup = HEIMNETZ
    name resolve order = lmhosts host bcast
    deadtime = 100
    keepalive = 150
    socket options = TCP_NODELAY,IPTOS_LOWDELAY,SO_KEEPALIVE,SO_SNDBUF=65536,SO_RCVBUF=65536
    use sendfile = no
    oplocks = no
    level2 oplocks = no
    log level = 0
    debug level = 0

[Webroot]
    comment = Apache
    path = /var/www
    valid users = www-data,webuser
    force group = www-data
    read only = No
    create mask = 0644
    locking = No

Nachdem als Samba-User hinzugefügt wurde (sudo smbpasswd webuser) kann die Freigabe mit einem Rechtsklick als Netzlaufwerk (bei mir Z:) verbunden werden. Permanent und mit gespeichterten Zugangsdaten funktioniert bei mir (Win 7) leider nicht. Jetzt kann Netbeans auf die Dateien im Webroot bequem über den lokalen (Beispiel-)Pfad <Z:\Testprojekt> auf die Quelldateien zugreifen. Bei einer Magento-Installation dauert das erste Indizieren 5-10 Minuten, danach ist das Ganze aber erstaunlich flüssig zu benutzen.

XDebug konfigurieren

Um xdebug benutzen zu können, muß dem Host-Rechner Zugriff gewährt werden. Dazu bearbeitet man mit dem Editor der Wahl die xdebug Konfiguration unter /etc/php5/conf.d/xdebug.ini:

xdebug.remote_enable=On
xdebug.default_enable=On
xdebug.remote_handler=dbgp
xdebug.remote_host=
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug

Danach einmal den Apache neustarten, damit die Konfiguration eingelesen wird. Um das Debugging auf dem CLI zu starten habe ich einen Bashscript im Netz gefunden (leider habe ich die URL des originalen Autors nicht mehr):

#!/bin/bash
XDEBUG_CONFIG="idekey=netbeans-xdebug" php -dxdebug.remote_host=echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}' $1

Dieser Skript liegt bei mir unter /usr/local/bin/xdebug und braucht nach der Erstellung natürlich noch ein sudo chmod 755 /usr/local/bin/xdebug um aufgerufen werden zu können.

Netbeans für Remote-Debug konfigurieren

In Netbeans muß unter Extras > Optionen > PHP > Debugging der Port auf 9000 stehen, die Session ID "netbeans-xdebug" lauten und der Haken bei "Stop at first line" gesetzt sein. Alles andere ist bei mir deaktiviert.

Die eigentliche Konfiguration erfolgt in den Eigenschaften des Projekts. Mit einem Rechtsklick auf das Projekt im Reiter "Projekte" auf der linken Seite gelangt man zu den Eigenschaften des Projekts. Dort zur "Run Configuration" wechseln und einen neuen Eintrag erzeugen. Ich habe meinen "Manual/CLI" genannt. Hier muß nur "Run As" auf "Local Website" gestellt sein. Mit einem Klick auf "Advanced…" kommt man ins Untermenü. Dort bei "Debug URL" den Radiobutton auf "Do not open Webbrowser" setzen.

Am wichtigsten ist die Einstellung beim Path Mapping, da Netbeans sonst die zu debuggenden CLI-Skripte nicht anzeigen kann. Dort bei "Server Path" einfach "/var/www" eintragen und bei "Project Path" unser vorher gemapptes Laufwerk Z: auswählen.

Debugging starten

In Netbeans kann jetzt jederzeit eine Debugging-Sitzung gestartet werden (grüner Pfeil mit rotem Punkt in der Werkzeugleiste) und Netbeans wartet daraufhin auf eine xdebug-Verbindung. Via Putty kann man dann auf der VM einfach xdebug test.php aufrufen, und Netbeans nimmt sofort die Verbindung auf und zeigt test.php im Debugger. Die Datei "test.php" muß dafür irgendwo unter /var/www liegen, sonst weiß Netbeans nicht wo es suchen soll.

Natürlich kann man auch weiterhin bequem im Browser debuggen, z.B. mit der Easy XDebug Firefox Extension. Ich persönlich finde es sehr viel angenehmer die Debugging-Session manuell zu starten, da Netbeans bei mir für jeden Start und jedes Ende einer Session einen neuen Browsertab geöffnet hat.

Mit der hier vorgestellten Konfiguration lassen sich zusätzlich PHP-CLI Skripte debuggen, und man hat die volle Kontrolle darüber wann und wo eine Debug-Session starten soll.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert