FirePHP ist eine Kombination aus Firefox-Plug-Ins und serverseitiger Bibliothek, mit der Sie allerlei saftige Informationen aus Ihrer Webanwendung an Ihren Browser senden können, ähnlich wie die Funktionen console.log () mit JavaScript. In diesem PLUS-Tutorial und Begleit-Screencast zeigen wir Ihnen, wie Sie von Anfang an anfangen können!
Dieses Tutorial enthält einen Screencast für Tuts + Premium-Mitglieder.
Du denkst also, du bist ein großartiger Webentwickler, oder? Lesen Sie nicht weiter, bis Sie die erste Herausforderung bestehen: Beantworten Sie die folgenden Aussagen (ehrlich) mit "wahr" oder "falsch":
Wenn Sie alle drei mit einem lauten "Wahr" beantwortet haben, klopfen Sie auf den Rücken. Ich vergebe dir, dass du nicht Nummer drei bekommst, aber wenn du Firefox nicht mit Firebug verwendest ... wo bist du gewesen?!?
Sie benötigen diese gewinnende Kombination, um dieses Tutorial abzuschließen. Das letzte, was Sie brauchen - um der große Meister, der Entwickler, der Code-Slayer Ihrer Träume zu werden - ist der wichtigste Teil: FirePHP.
FirePHP ist eine Kombination aus Firefox-Plugins und serverseitiger Bibliothek, mit der Sie alle Arten von saftigen Informationen aus Ihrer Webanwendung an Ihren Browser senden können.
echo $ variable;
Dieser Code ist so üblich. Manchmal scheint es der schnellste Weg zu sein, um den Wert von zu ersetzen $ variable Sie wissen also, was es zu einem bestimmten Zeitpunkt der Codeausführung ist.
Aber was wenn $ variable ist keine Zeichenfolge oder Ganzzahl; Was ist, wenn es sich um einen komplexen Datentyp wie ein Array oder ein Objekt handelt? In PHP wäre der obige Code nicht so hilfreich:
"Verwenden Sie einfach print_r ($ variable);" Ich höre dich sagen. Okay, Smarty-Hose, aber das ist nicht sehr elegant. Der Versuch, den Wert eines Array-Objekts in diesem Durcheinander zu finden, ist ein Schmerz. Und Objekte werden immer noch nicht sortiert!
Wenn Sie sehen, was FirePHP kann, ändern Sie Ihre Meinung! Dadurch wird das Debuggen zu einem überraschend erfreulichen Prozess und führt zu wesentlich mehr portablem Code.
In diesem Tutorial werde ich Ihnen zeigen, wie Sie FirePHP in Ihrer App einrichten und wie Sie damit die Entwicklung und das Debugging beschleunigen können.
Wenn Sie die FirePHP-Erweiterung nicht installiert haben, installieren Sie sie jetzt.
Die FirePHP-Erweiterung (die ich ab jetzt als FirePHP bezeichnen werde) ist vollständig auf Firebug angewiesen, also brauchen Sie das auch. Die serverseitigen Klassen (die ich FirePHPCore nennen werde) sind als eigenständige Bibliothek verfügbar. Es gibt auch eine Reihe von Plugins für die gängigen PHP-Frameworks und CMSs.
Simon sagt:
Obwohl der Name etwas anderes vermuten lässt, ist FirePHP nicht nur für PHP-Entwickler. Es verwendet einen eigenen Satz von HTTP-Headern, um Informationen von Ihrer Anwendung an den Browser zu senden, sodass sie problemlos in andere Sprachen portiert werden kann. Es gibt serverseitige Bibliotheken für ASP, Ruby, Python und mehr. Wenn es keine Sprache für Ihre Sprache gibt, können Sie sich immer herausfordern und Ihre eigene Sprache schreiben.
Dies macht es auch ideal für das AJAX-Debugging, da asynchrone Antworten reinen Inhalt sind, der nur die Ausgabe enthält, die Sie sehen möchten - nicht den Debugging-Code.
Laden Sie Ihre bevorzugte serverseitige Bibliothek herunter. In diesem Tutorial konzentriere ich mich auf die Verwendung der Standalone-Kernbibliothek. Anweisungen zum Einrichten anderer Bibliotheken finden Sie im FirePHP-Wiki.
Simon sagt:
Wenn Sie PEAR eingerichtet haben und dies vorziehen, geben Sie einfach die folgenden zwei Zeilen in die Befehlszeile ein:
pear channel-entdecken pear.firephp.org pear install firephp / FirePHPCore
Wenn Sie das Paket entpackt haben, gehen Sie in die lib Ordner und kopieren Sie die FirePHPCore Ordner auf Ihrem Webserver oder App-Include-Ordner.
Simon sagt:
Das Standalone FirePHPCore bietet unter anderem Unterstützung für PHP4. Sie können es sogar in einige dieser Retro-Websites einbinden, die Sie noch ausführen!
Wie bei allen guten Codier-Tutorials beginnen wir mit einem grundlegenden Beispiel, dem "Hallo, Welt" von FirePHP.
Erstellen Sie ein neues leeres PHP-Dokument. Ich rufe meine an test.php. Speichern Sie es im Stammverzeichnis Ihrer App.
Damit FirePHPCore seine Arbeit erledigen kann, müssen wir die Ausgabepufferung aktivieren. Lesen Sie mehr darüber, wenn Sie es noch nicht verwendet haben. Es ist eine gute Angewohnheit, sich trotzdem damit zu beschäftigen.
Natürlich dürfen wir nicht vergessen, die FirePHPCore-Bibliothek einzubinden. Wenn Sie PHP5 verwenden, fügen Sie dies oben in der Datei ein:
include_once ('umfasst / FirePHPCore / fb.php');
Wenn Sie PHP4 ausführen, schließen Sie das ein fb.php4 Datei stattdessen.
Simon sagt:
Die Klassendatei muss nicht eingefügt werden, da diese in der Datei fb.php enthalten ist.
Nun können wir die Ausgabe an die Firebug-Konsole starten. Geben Sie Folgendes nach ein ob_start () und davor ob_end_flush ():
FB :: info ('Hallo, FirePHP');
Simon sagt:
FirePHPCore verfügt über eine prozedurale und eine objektorientierte API. Es gibt wirklich keinen Unterschied zwischen den beiden und Sie können verwenden, was Sie bevorzugen.
Es verwendet auch das Singleton-Muster, um Speicherplatz zu sparen, und verfügt über eine vollständig statische Hilfsklasse, die ich jedoch vorziehen möchte, da weniger Codierung erforderlich ist.
Öffne Firefox, starte Firebug und gehe zu dieser Seite. Sie sollten so etwas bekommen:
Wie cool ist das!? Nun, das ist keine sehr aufregende Demo, also versuchen wir etwas komplizierteres.
Mal sehen, was passiert, wenn wir eine komplexe Variable übergeben. Wir bauen ein Array und sehen, was wir bekommen. Fügen Sie den folgenden Code unmittelbar nach dem letzten Aufruf von FB :: info () hinzu:
$ array ['key1'] = 'etwas Inhalt'; $ array ['anotherKey'] [] = 1234; $ array ['anotherKey'] [] = 5678; $ array ['anotherKey'] [] = 9012; $ array [] = null; FB :: info ($ array, 'My Array Test');
Speichern Sie jetzt, gehen Sie zu Firefox und aktualisieren Sie.
Ok, sieht gut aus ... aber wo ist die Ausgabe? Bewegen Sie den Mauszeiger über die neue Zeile.
Beeindruckend. Der Firebug-Rahmen zeigt uns alle Daten in unserem Array - nicht nur Array-Elemente der ersten Ebene, sondern auch Down-Level-Elemente - und zwar auf eine übersichtliche und lesbare Weise.
Mit Objekten wird es noch interessanter! FirePHPCore nutzt die Reflexion in vollem Umfang, um die Eigenschaften eines Objekts zu prüfen - auch private.
Simon sagt:
FirePHPCore verfügt über eine Reihe von Optionen, mit denen der Prüfumfang in Arrays und Objekten begrenzt werden kann. Sie können sogar einen Filter für Objekteigenschaften erstellen, die nicht an den Benutzeragenten weitergegeben werden sollen.
Weitere Informationen zur FirePHPCore-API finden Sie im FirePHP-Hauptsitz.
Es sollte Ihnen schon klar sein, dass dies beim allgemeinen Debugging helfen kann, aber jetzt werde ich einige einfallsreiche Möglichkeiten zur Verwendung von FirePHP betrachten.
Wenn Sie einen einzigen Front-Controller verwenden, um alle Anforderungen für die App weiterzuleiten und diese zu booten, können Sie die Zeitdauer für die Verarbeitung der einzelnen Anforderungen an Ihre Anwendung auf dem Server in Anspruch nehmen.
So etwas würde es tun:
Beachten Sie, dass dies nicht nur eine Darstellung der Reaktionszeit ist Code-Ausführungszeit - wie schnell Ihr Server den Code ausführt bevor Sie es an den Benutzeragenten senden. Die Ausgabe muss weiterhin vom Server zum Client über das Netzwerk geleitet werden.
Simon sagt:
Sie können die YSlow-Erweiterung für Firebug verwenden, um die gesamten Ladezeiten und das Reaktionsverhalten der App zu verfolgen.
Wenn Sie eine zentrale Abfragefunktion verwenden oder eine Datenbankconnector-Klasse erweitern (z. B. mysqli), können Sie einen Zeitgeber um alle synchronen Abfragen wickeln und prüfen, wie lange diese dauern.
Sie können sich auch die SQL-Abfragen selbst notieren. Tatsächlich könnten Sie diese zwei Datenbits zusammenfügen. Und wäre es nicht schön, das in einer gut strukturierten Tabelle anzuzeigen?
Firebug hat eine Tabellenstruktur und FirePHPCore hat auch einen Wrapper dafür:
Simon sagt:
Ich habe hier ein paar Extras geworfen. Wenn in der Datei myDb.class.php der $ Ergebnis Variable kommt zurück falsch, Dies bedeutet, dass diese Abfrage fehlgeschlagen ist. Also benutze ich FB :: error () um dies als Fehler in Firebug zu kennzeichnen und mir die Abfrage sowie zu zeigen FB :: trace () um mir den Prozessstack zu zeigen, der zur fehlerhaften Abfrage führt.
Der Schlüssel ist hier der FB :: table () Methode. Dadurch werden strukturierte Debugging-Informationen erstellt kinderleicht.
Wenn Sie nun Ihre myDb-Klasse instanziieren und eine Abfrage ausführen, werden die Details dieser Abfrage in einem Array angezeigt. Wir greifen dann später auf dieses Array zu, um unsere FirePHP-Tabelle mit allen Abfragen zu erstellen, die Sie für diese Anforderung ausgeführt haben, wie viel Zeit jeweils gedauert hat, und der gesamten Ausführungszeit aller Abfragen.
Was Sie hier mit nur wenigen Zeilen Code gemacht haben, wäre mit nur unmöglich möglich gewesen Echo. Man konnte nicht hoffen, in so kurzer Zeit etwas so Nützliches zu bekommen. Das führt zu einem schnellen Debugging.
Die Verwendung von FirePHPCore für AJAX-Anforderungen unterscheidet sich nicht von der Verwendung für synchrone Anforderungen. Verwenden Sie einfach die Funktionen wie gewohnt. Wenn Ihre App AJAX-Anforderungen ausgibt, werden die zusätzlichen FirePHP-Headerinformationen übermittelt und von der clientseitigen Erweiterung in der Firebug-Konsole verarbeitet. Lass es uns versuchen.
Erstellen Sie eine neue Datei mit dem Namen ajax.php in der Wurzel Ihrer App. Geben Sie den folgenden Code ein:
Jetzt in deiner test.php Datei, fügen Sie nach Ihrem letzten Aufruf von FB :: info () Folgendes hinzu:
?>
Wenn Sie test.php in Firefox aktualisieren, sollte Ihr "Click Me!" Taste. Wenn Sie darauf klicken, sollte der Browser eine AJAX-Anfrage ausführen und die Antwort (in diesem Fall Klartext) in die laden
.
Wichtiger noch, FirePHP fügt Firebug einen neuen Knoten hinzu, der uns alle FirePHP-Meldungen anzeigt, die wir in der Datei ajax.php protokolliert haben.
4) Default Error Handler
Wenn Sie dies beim Start Ihrer App festhalten, werden selbst fiese alte PHP-Fehler in Firebug ausgegeben!
set_error_handler ('myErrorHandler'); // Sie können die optionalen Parameter $ errfile, $ errline und $ errcontext hinzufügen, um weitere Informationen zu erhalten. Funktion myErrorHandler ($ errno, $ errstr) FB :: error ($ errstr, 'Fehlernummer') $ errno); // Fahren Sie mit der normalen Ausführung fortDies ist eine viel sauberere und sicherere Möglichkeit, Fehler zu melden. Es ist sogar noch besser, wenn Sie Ihre Apps den Kunden während der Entwicklung demonstrieren (und die Gefahr besteht, dass sie nicht kritische Fehler verursachen). Wenn sie Firefox nicht mit Firebug und FirePHP verwenden, werden sie diese abscheulichen Fehler nicht sehen , aber du wirst ... in Firebug. Ändern Sie nicht mehr Ihre Fehlerberichterstattungsstufen, um die Dinge in Ordnung zu halten! Das ist eine schnellere Entwicklung.
Sicherheit
FirePHP ist zwar ein hervorragendes Werkzeug zum Debuggen während der Entwicklung und des Testens, sollte jedoch nicht unterbrochen werden, wenn eine App in Produktion geht. Dadurch können möglicherweise zu viele Informationen über Ihre App angezeigt werden, die das Leben für Hacker noch einfacher machen.
Wenn Sie über HTTPS eine Verbindung zu einer Site herstellen, werden natürlich alle Header-Informationen standardmäßig verschlüsselt. Andernfalls wird es als Nur-Text gesendet.
Dies führt zu einem zusätzlichen Aufwand für Ihre App, der die Leistung erheblich beeinträchtigen und die Bandbreite beeinträchtigen kann.
Dies bringt mich zu einem weiteren wichtigen Punkt in Bezug auf FirePHPCore: Sie können den FirePHP-Code beibehalten, er sendet jedoch keine Daten, wenn er deaktiviert ist oder wenn die anfordernde Benutzeragentenzeichenfolge nicht die spezifische FirePHP-Referenz enthält.
Wenn Sie FirePHP unbedingt an Produktionsstandorten aktivieren müssen, z. B. für das Remote-Debugging, stellen Sie sicher, dass sich ein Switch befindet, und vergessen Sie nicht, ihn abzuschalten, wenn Sie fertig sind. So etwas wie:
define ('DEBUG_MODE', true); FB :: setEnabled (false); if (DEBUG && $ _SESSION ['userIsAdmin']) FB :: setEnabled (true);Dies stellt sicher, dass selbst wenn DEBUG_MODE auf 'true' (d. H. 'Ein') gesetzt ist, nur eine authentifizierte Administratorsitzung mit einem Benutzeragenten, auf dem FirePHP installiert ist, den Debugging-Code auslösen und die zusätzlichen Header-Informationen erhalten.
Fazit
FirePHP ist ein brillantes Werkzeug. Es ist perfekt in meinen Workflow eingefügt. Weil es immer da ist und auf die Werkzeuge aufgeschraubt ist, die ich bereits täglich verwende, ist es zur zweiten Natur geworden.
Noch wichtiger ist, dass es meine Haut mehr als ein paar Mal gerettet hat. Ich konnte Standorte in der Produktion debuggen, ohne die Standorte herunterfahren zu müssen. AJAX-Debugging wurde dadurch zu einer sehr realen Möglichkeit, und da es Open Source ist und kostenlos verwendet werden kann, sind die Adoptionskosten extrem niedrig.
Hinzu kommt, dass meine Apps jetzt portabler sind, ich habe einen besseren Einblick in sie und habe auf dem Weg ein paar neue Tricks gelernt, die nicht mögen?
Immer mehr Webentwickler verwenden den Browser als primäres Entwicklungswerkzeug. Und warum nicht? Hier sollen unsere Anwendungen funktionieren. Es erscheint daher irgendwie natürlicher, die Profilerstellung und das Debuggen direkt im Browser vorzunehmen. wo wir sowieso die meiste Zeit mit Debuggen verbringen!
Denken Sie, es ist an der Zeit, nicht mehr zu verwenden Echo jetzt? Glückwunsch, Super-Dev!
FirePHP wurde von Christoph Dorn erstellt. Version 0.3.1 ist die aktuelle stabile Version. Die Version 1.0 ist in der Entwicklung und verspricht einige aufregende neue Funktionen.