Umstieg auf PDT
So… ich bin jetzt von PHPEclipse auf PDT umgestiegen. Eigentlich war ich mit PHPEclipse im großen und ganzen ja zufrieden. Die Bugs haben im täglichen Gebrauch kaum gestört und wenn man sich erstmal an ein Programm gewöhnt hat, dann möchte man da eigentlich auch nicht so schnell wieder weg. Heute wollte ich mich dann aber mal mit Remote Debugging mit Xdebug beschäftigen, da ich einen ziemlich fiesen Bug fixen musste. Das war mit PHPEclipse aber nicht möglich, da ich an folgendem Problem gescheitert bin:
java.lang.IllegalArgumentException: Path for project must have only one segment.
Abgesehen davon scheint das Projekt schon wieder ein bisschen eingeschlafen zu sein (ein Monat lang keine Commits, Milestones alle mehrere Monate überzogen).
Also PHPEclipse deinstalliert und PDT über die Update Site installiert… alles ohne Probleme. Mein PHP-Projekt hab ich dann wie hier beschrieben an PDT angepasst und schon lief alles. Die ganzen Einstellungen werd ich mir die nächsten Tage mal nach und nach anschauen und so einstellen, dass mir die ganzen Eingabehilfen nicht allzu sehr auf den Sack gehen.
Die Einstellung für das remote debugging war dann ein bisschen tricky, weil ich erstmal etwas rumprobieren musste, was er nun genau wo stehen haben möchte. Der „XDebug Guide for PDT 2.0“ war da ganz hilfreich.
Eines der „Probleme“ mit denen ich hier zu kämpfen habe ist, dass beim remote debugging der Webserver den Client (also meinen Rechner) kontaktiert. Das wird aber schwer, wenn die Adresse fest eingetragen werden muss, mein Rechner dank DHCP und VPN aber ständig woanders ist. Das löse ich jetzt erstmal über einen SSH-Tunnel. Auf dem Server gibt es also folgende Einstellungen:
xdebug.remote_enable = 1
xdebug.remote_host = localhost
xdebug.remote_port = 9000
Dann stelle ich den SSH-Tunnel zum Server hier:
ssh -R 9000:localhost:9000 web-uwe@devel.spion-hro
PDT ist dann ebenfalls auf Port 9000 konfiguriert und jetzt funktioniert das auch alles. Der Bug lies sich dann auch relativ fix lokalisieren: Man sollte keine mehrdimensionalen Arrays an preg_replace() schicken. Der stampft die 2. Ebene nämlich ein und macht daraus jeweils Strings mit dem Inhalt „Array“… soviel dazu… 😉