Logik-Fehler im PHP-Code finden

Teil 2: Firebug-Erweiterung FirePHP für Firefox: Fehler in der Anwendungslogik finden

  1. Firebug-Erweiterung FirePHP für Firefox: Fehler in der Anwendungslogik finden
  2. Teil 2: Firebug-Erweiterung FirePHP für Firefox: Fehler in der Anwendungslogik finden

Als Erstes ist es wichtig, die FirePHP-Ausgabe ein- und abschaltbar zu machen. Sie ist per Voreinstellung eingeschaltet und sollte zum Beispiel per Konstante in der Konfiguration abgeschaltet werden können.

Dieser Schritt ist wichtig, damit PHP in der Produktiv-Umgebung nicht aus dem Nähkästchen plaudert und die interne Funktionsweise oder gar die Zugangsdaten zur Datenbank einem Fremden offenbart. Dies geschieht durch die Verwendung der Funktion setEnabled. Für FirePHP-Objekte heißt es

$firephp->setEnabled(false);

bei Verwendung statischer Methoden

FB::setEnabled(false);

Die Methoden heißen gleich und nehmen die gleichen Parameter entgegen.

$p1 = new Person(1);
$p1->sagHallo();
$p1->trinkeWein("Merlot", 100);
$p1->lagereWein("Merlot", 60);
echo $p1->weinVorrat("Merlot");

Es interessiert uns, warum die Bestände ins Minus rutschen können. Dies erreichen wir, indem wir schon in der ersten Zeile der Funktion trinkeWein ausgeben lassen, wer wie viel aus dem Lager anfordert. Dazu nutzen wir die FirePHP-Funktion log:

FB::log($this->name . " will " .
$menge . " Flashen ". $wein. " trinken. Besitzt davon: " . $this->weine[$wein]);

Es wird protokolliert, was und unter welchen Umständen geschieht. Wenn Sie so etwas wie "Nero will 100 Flashen Merlot trinken. Besitzt davon: " sehen, sehen Sie möglicherweise richtig. Vielleicht hat Nero niemals Merlot besessen? Wenn Sie von außerhalb der Klasse nachsehen wollen, was Nero einlagern ließ, werden Sie einen Fehler bekommen. weine ist private und somit von Außen nicht lesbar. Mit

FB::info($this->weine, $this->name .
"'s Weinlager");

innerhalb derselben Funktion werden Sie erfolgreicher: "Nero's Weinsortiment: array(...". Wenn Sie es anklicken, erscheint die in PHP übliche print_r- beziehungsweise var_dump-Darstellung des übergebenen Objektes.

Die Funktionen log, info, warn und error nehmen als erstes Argument das auszugebende Objekt und optional eine Beschreibung. Die Funktionen unterscheiden sich nur in der grafischen Darstellung. Da der Mensch dazu neigt, vor lauter Bäumen den Wald nicht mehr zu sehen, sollte man das zusammenfassen, was zusammen gehört.Mit FB::group('Gruppenname'); leiten Sie eine im Browser zusammenklappbare Gruppe von Debug-Nachrichten ein und fassen sie unter einem frei wählbaren Namen zusammen. Mit FB::groupEnd(); schließen und beenden Sie diese.

Firebug-Erweiterung FirePHP

© Archiv

Konsole und Netzwerk sind für die Nutzung von FirePHP notwendig und können für die gesamte Domäne (hier: localhost) eingeschaltet werden.

Tabelle statt Array-Dump

Schöner als ein Array-Dump ist natürlich eine Tabelle. Auch dies ist mit FirePHP möglich. Die Funktion table erwartet - anders als sonst - zunächst einen Tabellennamen, dann die Daten in Form eines speziell formatierten Arrays.

Dieses Array enthält als erstes Element ein Array, der Spaltennamen enthält. In unserem Beispiel wird etwas Arbeit nötig, um die Daten so aufzubereiten:

$a = array();
$a[] = array('Sorte', 'Menge');
foreach($this->weine as
$sorte => $menge) {
$a[] = array($sorte, $menge);
}
FB::table($this->name . "'s
Weinlager", $a);

Spätestens hier fällt auf: Nero hat selbst keinen Merlot. Seinem Wunsch nach 100 Flaschen dieses Weines sollte auf jeden Fall eine Prüfung des Bestandes vorausgehen. In größeren Projekten wird das Problem natürlich komplexer und unüberschaubarer sein.

Durch den Einsatz von Klassen kann manchmal das Zustandekommen eines Methodenaufrufes einem Rätsel gleichen. Hier hilft FB::trace('Beschreibung');. Es fasst in einer Tabelle alle Informationen der Rückverfolgung zusammen. Durch die Nutzung der Funktionen registerErrorHandler und registerAssertionHandler wird FirePHP angewiesen, Fehler (Exceptions) und Zuweisungs-Probleme zu handhaben.

Mit FB::dump($variable); schicken Sie eine beliebige Variable zu einer genaueren Untersuchung an den Browser. Diese finden Sie nicht in Konsole sondern im Reiter Netzwerk unter Details der HTTP-Anfrage im Bereich Server. FirePHP ist der Helfer, den sich ein PHP-Programmierer wünschen kann, um oft übersehenen Fehlern zu begegnen.

Das Wissen um gute oder sichere PHP-Programmierung kann es jedoch nicht ersetzen. Denken Sie zum Beispiel an den Konstruktor unserer Klasse, der die übergebene ID nicht weiter untersucht, sondern vielleicht ungeschützt ins SQL einbindet.

Mit dem Grundwissen um den Einsatz von FirePHP finden Sie einen Einstieg in eine entspannte Art der Programmierung und der unvermeidbaren Fehlersuche. An dieser Stelle sollte der Vollständigkeit halber auf FirePHP-Headquarters () verwiesen werden, wo Sie weitere Informationen zur Funktionsweise und zu möglichen Konfigurationsoptionen erhalten können.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".