PHP Dbg und der Apache
So, nachdem ich nun mal mein halbes gentoo System neu aufgesetzt habe bin ich auf etwas Interessantes gestoßen. Ich programmiere ab und an auch gerne mal PHP. Natürlich ist ein Debugger beim programmieren in der Umgebung ein recht nützliches Werkzeug. Also habe ich mich einmal auf die Suche gemacht und auch was feines gefunden.
PHP Dbg nennt sich der nette Gefährte und er lässt sich auch relativ einfach in Eclipse integrieren. Zur Vorbereitung jedoch erst einmal was anderes. Damit ich als normaler User auf meinem System PHP ordentlich und ohne Umwege scripten kann habe ich mir einen Userdir angelegt. Das geht wie folgt. Zuerst müsst ihr dazu die /etc/conf.d/apache2 auf eurem gentoo System bearbeiten. Dort sind die APACHE2_OPTS wichtig. Fügt dort einfach “-D USERDIR” hinzu. Dann geht es weiter mit der /etc/apache2/modules.d/00_mod_userdir.conf. Diese sieht bei mir folgendermaßen aus:
<IfDefine USERDIR>
<IfModule userdir_module>
UserDir workspace/web
<Directory /home/*/workspace/web>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
<IfDefine SUEXEC>
<IfModule suexec_module>
<Directory /home/*/workspace/web/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>
</IfModule>
</IfDefine>
</IfModule>
</IfDefine>
Danach habe ich den Vorteil, dass ich in ~/workspace/web an meiner Seite arbeiten kann. Jetzt muss der apache nur noch neu geladen/gestartet werden und dann kann man auch schon mal eine kleine Testseite aufrufen. Diese Testseite befindet sich in meinem Fall hier: http://localhost/~sep/ (sep, natürlich mein Benutzeraccount)
Schon ist es ein sehr viel angenehmeres Arbeiten. Nun kann ich mit der Installation von PHP Dbg beginnen. Dazu diesen erst einmal unmasken und dann emergen. Nicht zu vergessen ist das Common Language Interface von PHP. Da ihr ohne dies kein PHP Parser mit an Bord habt, welchen ihr jedoch braucht!
# echo "dev-lang/php cli" >> /etc/portage/package.use # emerge -avN php # echo "dev-php/phpdbg ~*" >> /etc/portage/package.keywords # emerge -av php phpdbg
Nun öffnet ihr die /etc/php/apache2-php/php.ini. Dort müssen alle Einträge mit zend und debug entfernt werden. Ist dies geschafft, gehts in der /etc/php/apache2-php/ext/dbg.ini gleich weiter. Diese sieht bei mir folgendermaßen aus:
[Debugger]
extension=dbg.so
debugger.enabled=on
debugger.profiler_enabled=on
debugger.timeout_seconds=600
debugger.JIT_enabled=Off
debugger.JIT_host = localhost
debugger.JIT_port = 7869
Danach wieder einmal den Apache neu laden/starten. Wenn ihr nun eine phpinfo Datei aufruft, sollte es dort eine neue Section geben. Diese heißt “dbg”. Dort sollten dann die Informationen stehen, welche ihr gerade in die dbg.ini geschrieben habt. Wenn das alles funktioniert hat können wir nun Eclipse starten. Wir nehmen uns nun ein, wie sollte es auch sein, PHP Projekt vor. Dort möchten wir beispielsweise die src/index.php debuggen. Dazu dann einfach auf den Debug Dialog und ein neues DebugScript für PHP erstellen. Als Namen könnt ihr euch dort was aussuchen. Bei mir nennt es sich “Debug PHP Core”.
Auf dem Reiter File wählt ihr in dem Punkt Project natürlich euer Projekt aus und bei File natürlich die Datei welche ihr debuggen wollt. Bei mir “src/index.php”. Den zweiten Reiter überspringe ich und fahre mit dem dritten fort.
Enviroment. Dort wählt ihr als Interpreter “/usr/bin/php” aus. Diese Datei wurde durch das cli USE-Flag erzeugt. Dann geht ihr zu Remote Debug. Dort ein Häckchen bei Remote debug setzen, Cross Platform debugging und Open with DBGSession URL in internal Browser. Nicht mehr Häckchen. Danach tragt ihr bei Remote Sourcepath den Pfad der zu debuggenden Datei auf dem Remote Rechner. Jedoch nur den root-Pfad zu dem Projekt. Darunter bei den Mapped Path dann wieder ähnlich. Der lokale Pfad ist natürlich euer Pfad zu dem Projekt. Der remote Pfad ist dann wieder der Pfad vom Server zu dem Projekt. Also, da das alles bei mir lokal läuft, sind alle drei Pfade gleich. Sie lauten “/home/sep/workspace/web”. Das zweite Enviroment Register könnt ihr dann überspringen.
In dem letzen Reiter Common nur noch den Hacken bei Debug machen und dann noch evtl. den Zeichensatz umstellen. Danach nur noch das Script speichern und schon kanns auch los gehen.
Wir wechseln nun zu erst in die Debug Sicht in Eclipse. Dann können wir ein paar Brechpunkte setzen und dann das Debuggen starten. Oben in der Debug Session sehen wir, dass der Debugger nun auf localhost Port 10001 lauscht. Also geben wir ihm den! Dazu öffnet ihr einen Browser. Dann rufen wir die Adresse nun auf. http://localhost/~sep/src/index.php. Die Seite wird normal aufgebaut und der Debugger wartet immer noch. Nochmal wie folgt aufrufen: http://localhost/~sep/src/index.php?DBGSESSID=1@localhost:10001 Wichtig ist dabei “DBGSESSID=1@localhost:10001″, womit der Debugger über den Apache aktiviert wird. Wenn nun alles geklappt hat, dann sollte die Seite sich nicht aufbauen. Dann läuft der Debugger und man kann in Eclipse durch steppen.
Wichtig sind nochmal die drei Ordner die ihr angeben müsst. Der Remote Path und die beiden Mapper. Wenn diese nicht vernünftig konfiguriert sind, läuft es einfach nicht. Es kommt kein Fehler und kein gar nichts. Einfach damit rum probieren. Was jedoch einfach mal hilft, um zu schaun, ob der Debugger funktioniert, ist ohne den Debugvorgang in Eclipse zu starten einfach mal “?DBGSESSID=1@localhost:10001″ an die Seite anhängen. Dann sollte kommen, dass der Debugger keinen Port finden kann, oder ähnliches. Also, euch viel Erfolg damit.