Wie PHP Debuggen mit Netbeans auf remote Webserver?

Kitro

Grünschnabel
Hallo Leute

Zum Erstellen von PHP Webseiten und Webservices nutze ich Netbeans, dass bisher am kompfortabelsten funktioniert (Code Formatierung, Syntax Highlighting, Intelli Sense, etc.).

Die Webseite die ich damit bearbeite liegt bei einem Webspace/Webserver Anbieter mit PHP und Mysql Unterstützung und FTP Zugang. Sobald ich lokal etwas ändere und speichere wird das automatisch per FTP hochgeladen.

Neben der Standard PHP Webseite, habe ich jetzt damit auch einen Webservice erstellt.

Das Problem:
Wenn irgendetwas nicht klappt, kann ich nur mit "throw new Exception()" rausfinden, was in den Variablen steht oder wo der PHP Code aussteigt. Ein richtiges debuggen, wie ich es aus C# mit Visual Studio kenne klappt nicht.

Dieses xdebug wird soweit ich das sehen konnte nicht unterstützt, kenne mich da aber auch nicht nicht so gut aus.

Die Frage:
Kennt jemand von euch eine Möglichkeit auf einem remote Webserver PHP Code zu debuggen?

Grüße Cornflake
 
Danke für deine Antwort, aber wie schon oben beschrieben, wird xdebug nicht unterstützt. Vllt. habe ich ja Glück und kann den Anbieter überzeugen xdebug auf dem Webspace zu installieren.
 
Ansonsten bleibt eben die Frage, was du remote debuggen können musst, das du mit einer lokalen Installation nicht debuggen kannst. (Nicht rhetorisch gemeint.) Du musst Fehlerszenarien prinzipiell ohnehin nachstellen, weil die vermutlich von Nutzern ausgelöst und dir erst später mitgeteilt werden.
 
Hallo,

Xdebug ist zum Debuggen die verbreitetste Variante mit PHP. Aber du willst xdebug nicht in einer Produktiven Umgebung haben. Das hat unter Umständen erheblichen Einfluss auf die Performance des Webservers.

Persönlich würde ich dir sowieso dazu raten, nicht auf dem Server direkt zu Entwickeln. Da führt in vielen Situationen zu Problemen.
Wenn du dich weiter mit der Webentwicklung auseinander setzten möchtest würde ich dir empfehlen dich mit Versionierung (z. B. GIT) und Deployment (z. B. Capistrano) auseinander zu setzen. Auch bei sehr erfahrenen Entwicklern kommt es vor, dass teilweise Dinge auf dem Server direkt ausprobiert werden. Manches kann man einfach nicht lokal testen.
Staging usw. würde ich in deiner Situation außer acht lassen, das ist wohl erst einmal zu viel Overhead.

Ein mögliches Setup wäre z. B. : (Annahme Linux Webserver mit FTP Zuganng; Entwicklungsrechner Windows)
1. Entwicklung unter Netbeans in Windows
2. "Lokaler" Webserver in einem virtuellen Linux, dass das selbe Setup hat wie der Produktive Server + zusätzlich xdebug
3. GIT Repository Lokal (oder bei github,bitbucket,...) => Versionierung
4. Capistrano in Cygwin => Deployment

Im folgenden beschreibe ich mal kurz einen möglichen Prozess für eine Entwicklung.
Ausgangssituation: Ein Fehler soll behoben oder ein Feature soll entwickelt werden
1. In deinem GIT legst du einen Branch für das Feature oder den Bug an.
2. Entwicklung: Du entwickelst deinen Änderungen und machst ein Deployment auf deinen virtualisierten Webserver
3. Testen: Dort testet du deine Änderungen in der Oberfläche oder mit Xdebug bis alles so funktioniert wie du erwartest
4. Integration: Wenn du Fertig bist, mergst du deine Änderungen auf den Haupt-Branch (master) von GIT zurück
5. Deployment: Der master Branch wird per ftp mit capistrano auf den Server deployed
Optional 6. rollback: Du stellst fest das du Blödsinn entwickelt hast oder einen Bug hast, dann sagst du Capistrano, dass die letzte Version wieder hergestellt werden soll.

Warum macht man das alles?
Versionierung: Dadurch wird es dir möglich nachzuvollziehen, wann sich dein Code wie geändert hat. Das wird noch interessanter wenn es mehr Entwickler werden aber auch bei einem einzelnen Entwickler hat es auf jeden Fall Vorteile. Allein schon die Tatsache, dass du nächstes Jahr noch gucken kannst wie du einen Bug von jetzt gefixed hast ist ein erheblicher Gewinn. Und wenn man mal etwas kaputt spielt (passiert jedem mal) kann man einfach die Änderungen ohne Probleme wieder verwerfen.

Deployment: Meiner Meinung nach ist der größte Vorteil das rollback und die Automatisierung. Wenn dein Projekt größer wird, wird es sicherlich irgendwann notwendig das bei neuem Code auch Aktionen ausgeführt werden. (z. B. Caches löschen bzw. neu erzeugen, Indizes neu erzeugen, temporäre Daten aufräumen). All das macht dir ein gut eingerichtetes Deployment automatisch und schließt damit schon einmal viele Fehlerquellen aus. Ein rollback im Fehlerfall erklärt sich von selbst

Lokale Entwicklung: Es kommt immer mal vor, dass beim Entwickeln Fehler passieren. Die darf und sollte ein Benutzer nicht sehen. Eine falsche Debug-Ausgabe und Datenbankzugänge sind im Frontend sichtbar. Daher wird eigentlich nur in ganz speziellen Ausnahmefällen mal eine Änderung direkt auf dem Server vorgenommen.


Der versierte Webentwickler wird hier ein paar Begriffe vermissen wie z. B.: Staging, Tagging, automatisierte Tests, ...

Das oben stehende ist nicht als ausführliche Anleitung zu verstehen, sondern als eine Möglichkeit die ich dir gerne aufzeigen möchte. Es gibt auch viele andere gute Prozesse.
Solltest du dich für diesen entscheiden, wird sicherlich die eine oder andere Frage auftauchen. Die kannst du hier dann gerne stellen. Und vielleicht schafft man es ja auch gemeinsam daraus ein Tutorial für den Aufbau eines solchen Setups zu schreiben und hier mal für die Zukunft fest zu halten.

VG
Nino
 
Zurück