Debuggen von Pixel-Grafik mit PHP

PHP-Konfiguration

Die Konfiguration von PHP ist in der Text-Datei php.ini festgelegt.
An einem Entwicklungs-Server (nur dort !) werden alle Fehler und Warnungen angezeigt.
Man legt eine Sicherungs-Kopie der Datei an und ändert die Werte einiger Variablen, z.B. so:
error_reporting = E_ALL | E_DEPRECATED
display_errors = On
display_startup_errors = On
log_errors = On
track_errors = On
html_errors = On
error_prepend_string = "<div style='background‑color:#FF0'>"
error_append_string = "</div>"
error_log = /var/log/apache2/php_error.log
Auf einem Windows-PC wird lediglich der mit error_log angegebene Pfad geändert.
Die Änderungen der PHP-Konfiguration treten erst nach einem Neu-Start des Webservers in Kraft.



Hier wird eine Methode vorgestellt, um die Entwicklung binärer Produkte zu erleichtern:
Man programmiert so, dass wahlweise ein Text-Produkt oder eine binäre Pixel-Grafik erzeugt wird.
Die Auswahl erfolgt mit dem Wert einer einzigen Variablen. So kann man während der Entwicklung rasch und einfach zwischen dem lesbaren temporären Produkt und dem binären End-Produkt umschalten.

Die Herstellung von Pixel-Grafik mit PHP funktioniert gut und sicher. Dennoch wird empfohlen, für neue Pixel-Grafik-Projekte die besser geeignete → Canvas-Technologie zu verwenden.

Live-Ergebnis der Debug-Version



Rechts wurde die gleiche Datei mit dem GET-Argument debug angefordert:
<iframe src="pixel_debug.php?debug"></iframe>
Das Programm hat einen einfachen Text erzeugt, mit dem man Debug-Informationen ausgeben kann.


• Man kann die ↖ Grafik mit RechtsKlick am eigenen PC speichern und verwenden. Sie unterscheidet sich nicht von einer statischen Grafik-Datei, die mit einem Pixel-Grafik-Programm (z.B. GIMP) erzeugt wurde.

• Man kann den ↙ PHP-Quelltext in einer Text-Datei speichern. (Schalten sie davor die Zeilen-Nummern mit MausKlick ab). Das PHP-Programm ist nur mit einem PHP-Interpreter-Programm ausführbar, z.B. von jedem Standard Webserver  ( Apache) als (CGI)-Hilfsprogramm.

PHP-Quelltext

◀   Das Beispiel zeigt den Inhalt der Text-Datei pixel_debug.php
Mit dem darin enthaltenen PHP-Programm wird je nach Anforderung eine Grafik oder ein Text erzeugt.

• Mit der Variablen $debug wird die gesamte Ausgabe zwischen den beiden Versionen (binär oder Text) umgeschaltet. Sie erhält anfangs den Wert $debug=0; mit dem ohne weitere Maßnahmen die Grafik erzeugt wird.

• Unmittelbar danach wird geprüft, ob das Programm ein GET-Argument mit dem Namen debug erhalten hat. In diesem Fall erhält die Variable den Wert $debug=1; mit dem ein Text-Produkt erzeugt wird, und in dem auch alle Fehler-Meldungen und Warnungen enthalten sind.

Vor jeder anderen Ausgabe muss das Programm mit der Funktion header() die MIME-Type der nachfolgenden Daten ankündigen - In diesem Fall wird je nach dem Wert der Variablen $debug eine Grafik vom Typ PNG oder ein einfacher Text erzeugt. Ein Text als Debug-Version ist besser als eine Webseite, weil man auf den gesamten HTML-Overhead verzichten kann.

• Am Ende des Programms wird je nach dem Wert der Variablen $debug entweder die binäre Grafik (mit Funktion imagepng()) oder der Text an den Browser gesendet.

Die bisher angeführten Maßnahmen reichen aus, um alle PHP Fehler-Meldungen und Warnungen - allerdings nur am eigenen Entwicklungs-Server - anzuzeigen.

Darüber hinaus kann man die Werte von Variablen und / oder den Fortschritt des Programms mit eigenen Meldungen dokumentieren.
Dazu verwendet man eine der Funktionen echo(), print(), jeweils eingeschlossen in eine bedingte Verzweigung if() {...} die nur in der Debug-Version ausgeführt wird.
Solche selbst programmierten Meldungen werden auch an einem Produktions-Server angezeigt.



• Die Details der Funktionen sind im Original PHP-Manual gut dokumentiert und mit Beispielen ergänzt.
Kreise (Gesicht, Augen) werden mit imageellipse() oder imagefilledellipse() gemalt, wenn man Breite und Höhe der Ellipse mit dem gleichen Wert angibt.
Der Mund wird als Kreisbogen mit Funktion imagearc() gemalt.

• Die Funktion imagecolortransparent() ist im Beispiel abgeschaltet. Wenn man diese Zeile durch Entfernen der Kommentar-Zeichen // aktiviert, dann wird die Grafik auf transparentem Hintergrund angezeigt.

Wenn man die führenden Kommentar-Zeichen // von der Zeile
error="error"
entfernt, dann wird ein PHP-Fehler erzwungen. Damit kann man die Wirkung der hier vorgestellten Debug-Maßnahmen demonstrieren:
In der Produktions-Version wird nichts angezeigt, in der Debug-Version die PHP Fehler‑Meldung.