==== Visual Studio Code für PHP installieren ====
In Laufe der Jahre entschliessen sich immer mehr Kunden und auch die SPE selbst, für die Erstellung von Skripten für Gateways nicht mehr die Skriptsprache Perl zu verwenden, sondern die Sprache PHP. Das hängt vor allem damit zusammen, dass sich jüngere Programmierer im Rahmen ihrer Ausbildung sehr wohl mit %%PHP%% aber selten mit %%Perl%% beschäftigt haben.
In diesem Beitrag soll nun gezeigt werden, wie sehr elegant in in %%PHP%% geschriebenen Skripten nach Fehlern gesucht werden kann. Grundlage dafür ist natürlich eine IDE (Integrierte Entwicklungsumgebung). **Microsoft** bietet mit dem kostenlosen Produkt [[https://code.visualstudio.com/|Visual Studio Code]] eine sehr kompakte Alternativ zu mächtigen Entwicklungsumgebungen wie etwa **Eclipse** oder **NetBeans**, die wir bisher eingesetzt haben.
Mit Hilfe von //Visual Studio Code// (kurz VS Code) wird im folgenden gezeigt, wie sich (c4p)-Gateway-Skripte effektiv debuggen lassen.
\\
\\
{{convert4print:tips:0070-1.png}}
\\
\\
Es wird dazu angenommen, dass VS Code auf dem Rechner läuft, auf dem auch die (c4p)-Gateways ausgeführt werden. Prinzipiell ist es auch möglich über das Netz auf einem anderen Rechner zu debuggen. Das ist allerdings aufwändiger zu konfigurieren. Hiweise dazu finden sich weiter unten.
\\
\\
=== Installation ===
Zunächst muss VS Code auf dem Rechner installiert werden, auf dem der (c4p) Client-/Gateway-Service läuft. Für unsere Ansprüche genügt es, wenn die Erweiterung //%%PHP Debug%%// mit installiert wird. Wie das geht, beschreibt die Dokumentation von [[https://code.visualstudio.com/docs/editor/extension-gallery|VS Code]].
Als nächstes muss die PHP Installation vorbereitet werden. Es wird eine Erweiterung zum Debuggen benötigt: //XDebug//. Diese wird häufig bereits mit %%PHP%% mitgeliefert (z.B. im XAMPP Paket). Eventuell muss sie allerdings nachinstalliert werden.
Um festzustellen, ob XDebug bereits installiert ist, wird eine Kommandozeile geöffnet, in das Verzeichnis der %%PHP-Installation%% gewechselt (in der die //php.exe// liegt) und dort der Befehl ''(sp)php -i > phpinfo.txt(sp)'' ausgeführt. Danach kann die entstandende Datei //phpinfo.txt// mit einem Editor geöffnet werden. Der Inhalt wird nun in die Zwischenablage kopiert und in das Eingabefeld auf der [[https://xdebug.org/wizard.php|XDebug-WebSite]] eingefügt. Nach einem Klick auf die Schaltfläche //Analyse my phpinfo() output// (unten links) erhält man eine Ausgabe, in der steht, ob //XDebug// installiert ist oder nicht.
Sollte //XDebug// nicht installiert sein, erhält man - falls man aktuell PHP 7 installiert hat - einen Vorschlag für die korrekte Version der XDebug-DLL. Ansonsten muss man die korrekte Version für die eigene %%PHP-Installation%% selbst auswählen. Ist die DLL heruntergeladen, wird sie in den Unterordner //ext// des %%PHP-Installationsverzeichnisses%% kopiert.
Damit PHP von der Existenz des Debuggers weiss, muss in der Datei //php.ini// im Installationsverzeichnis von PHP eine Änderung vorgenommen werden. In dieser INI-Datei gibt es eine Sektion mit dem Namen //[XDebug]// (ziemlich am Ende der Datei).
Der Wert für die Konfigurationsvariable //zend_extension// muss auf den Pfad zur XDebug-DLL gesetzt werden. Etwa:
[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
In der Sektion //[XDebug]// gibt es weitere - wahrscheinlich auskommentierte - Variablen, die wie folgt gesetzt werden sollten:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = "127.0.0.1"
xdebug.remote_port = 9000
Damit sind die Installationsarbeiten abgeschlossen. VS Code kann jetzt zum Erstellen von Skripten und zur [[convert4print:tips:tip71|Fehlersuche in PHP-Skripten]] für (c4p)-Gateways genutzt werden.
\\
\\
=== Hinweise ===
* Wichtig: Diese Änderungen an der //php.ini// müssen wieder rückgängig gemacht werden, sobald das Debugging abgeschlossen ist. Eine dauerhafte Verwendung von //XDebug// stellt sowohl eine Sicherheitslücke, als auch eine Performance-Bremse dar. Außerdem musste der Port (hier 9000) unter Umständen in der Firewall freigegeben werden, wenn (c4p) von einem anderen Rechner aus via Netzwerk debuggt wird.
* Wenn (c4p) auf einem anderen Rechner installiert wird, als der, auf dem (c4p) läuft, muss in der //php.ini// für die Konfigurationsvariable //xdebug.remote_host// die IP-Adresse des Rechners mit (c4p) angegeben werden. Sollten sich die Skript-Verzeichnisse auf den beiden Rechnern unterscheiden, muss in der //launch.json// noch der Wert //pathMappings// richtig gesetzt werden. Ein Beschreibung dafür findet sich in der Dokumentation der Visual Code Erweiterung //%%PHP Debug%%//.
* Generell ist die Wahl der Skriptsprache in (c4p) nirgends festgelegt. Was auf dem Rechner verfügbar ist, kann verwendet werden: Perl, PHP, Python, Javascript, Java, C, C++, Basic, etc.