FirePHP är en Firefox-plugin och server-sida bibliotek kombination som gör att du kan skicka all sorts saftig info från din webbapplikation till din webbläsare, precis som console.log () funktionalitet med JavaScript. I denna PLUS-handledning och companion screencast lär vi dig hur du kommer igång från början!
Denna handledning innehåller en skärmdump som är tillgänglig för Tuts + Premium-medlemmar.
Så du tror att du är en bra webbutvecklare, va? Läs inte vidare tills du klarar den första utmaningen: svara (ärligt) "sant" eller "falskt" om dig själv till följande påståenden:
Om du svarade alla tre med en rungande "sant", ge dig själv en klapp på baksidan. Jag förlåter dig för att du inte får nummer tre, men om du inte använder Firefox med Firebug ... var har du varit!?
Du behöver denna vinnande kombinationsruta för att slutföra denna handledning. Det sista du behöver - att bli stormästare, uber-utvecklare, koddämpare av dina drömmar - är den viktigaste delen: FirePHP.
FirePHP är en Firefox-plugin och server-sida bibliotek kombination som gör att du kan skicka all sorts saftig info från din webbapplikation till din webbläsare, på ett trevligare sätt än det vanliga:
eko $ variabel;
Den här koden är så vanlig. Ibland verkar det det snabbaste sättet att bara sprida ut värdet av $ variabel så du vet vad det är vid en viss punkt med kodkörning.
Men vad om $ variabel är inte en sträng eller ett heltal; Vad händer om det är en komplex datatyp som en array eller ett objekt? I PHP skulle ovanstående kod inte vara så bra:
"Använd bara print_r ($ variable);" Jag hör dig säga. Okej smartybyxor, men det är inte så elegantt. Att försöka hitta värdet på en matris i den röra är en smärta. Och det sorterar fortfarande inte ut objekt!
När du ser vad FirePHP kan göra, kommer du att ändra dig! Det gör debugging till en överraskande trevlig process och resulterar i mycket mer bärbar kod.
I den här handledningen ska jag visa dig hur du installerar FirePHP i din app och några bra sätt att använda det för att påskynda utveckling och felsökning.
Om du inte har FirePHP-tillägget installerat installerar du det nu.
FirePHP-förlängningen (som jag kommer att referera till som FirePHP från och med nu) är helt beroende av Firebug, så du behöver det också. Serverns klasser (som jag kommer att ringa FirePHPCore) finns som fristående bibliotek. Det finns också ett antal plugins för de populära PHP-ramarna och CMS.
Simon säger:
Även om namnet antyder annars, är FirePHP inte bara för PHP-utvecklare. Den använder sin egen uppsättning HTTP-rubriker för att skicka information från din applikation till webbläsaren, så den kan enkelt överföras till andra språk. Bibliotek finns på serverns sida för ASP, Ruby, Python och mer. Om det inte finns något för ditt språk, kan du alltid utmana dig själv och skriva ditt eget.
Detta gör det också perfekt för AJAX-felsökning eftersom det betyder att asynkrona svar är rent innehåll som bara innehåller den produkt du vill se - inte debugging-koden.
Fortsätt och ladda ner ditt favoritbibliotek på serversidan. I denna handledning kommer jag att fokusera på att använda det fristående kärnbiblioteket. Instruktioner för att konfigurera andra bibliotek finns på FirePHP wiki.
Simon säger:
Om du har PEAR-inställning och föredrar att använda det, skriv du bara följande två rader på kommandoraden:
päron kanal - upptäck pear.firephp.org päron installera firephp / FirePHPCore
När du har packat ut paketet, gå in i lib mapp och kopiera FirePHPCore mapp till din webbserver eller app inkludera mapp.
Simon säger:
En av de stora sakerna om den fristående FirePHPCore är dess stöd för PHP4. Så du kan även ansluta den till några av de retro webbplatser som du fortfarande kör!
Som med alla bra kodningstutorials börjar vi med ett grundläggande exempel, "Hello, World" av FirePHP.
Skapa ett nytt, tomt PHP-dokument. Jag ringer min test.php. Spara det till roten till din app.
För att FirePHPCore ska kunna utföra sitt arbete måste vi aktivera utmatningsbuffert. Läs mer om detta om du inte har använt det tidigare, det är en bra vana att komma in i alla fall.
Naturligtvis får vi inte glömma att inkludera FirePHPCore-biblioteket. Om du kör på PHP5 lägger du till det här i början av filen:
include_once ('includes / FirePHPCore / fb.php');
Om du kör PHP4, inkludera fb.php4 filen istället.
Simon säger:
Vi behöver inte inkludera klassfilen eftersom det ingår i fb.php-filen.
Nu kan vi börja mata ut till Firebug-konsolen. Skriv följande efter ob_start () och före ob_end_flush ():
FB :: info ('Hej, FirePHP');
Simon säger:
FirePHPCore har ett processorienterat och objektorienterat API. Det finns ingen skillnad mellan de två och du kan använda det du föredrar.
Det använder också singleton mönstret för att spara minne och levereras med en helt statisk hjälparklass, som jag föredrar att använda eftersom det kräver mindre kodning.
Öppna Firefox, starta Firebug och gå till den här sidan. Du borde få något så här:
Hur coolt är inte det!? Tja, det är inte en väldigt spännande demo, så låt oss försöka något lite mer komplicerat.
Låt oss se vad som händer när vi passerar i en komplex variabel. Vi bygger en array och ser vad vi får. Lägg till följande kod strax efter den sista FB :: info () call:
$ array ['key1'] = 'lite innehåll'; $ array ['anotherKey'] [] = 1234; $ array ['anotherKey'] [] = 5678; $ array ['anotherKey'] [] = 9012; $ array [] = null; FB :: info ($ array, 'My Array Test');
Spara nu, gå till Firefox och uppdatera.
Okej, ser bra ut ... men hänga på, var är all produktion? Håll markören över den nya linjen.
Wow. Firebug-ramen visar oss alla data i vårt sortiment - inte bara förstegruppselement, utan även på nivån - och på ett snyggt och läsbart sätt.
Det blir ännu mer intressant med föremål! FirePHPCore gör full användning av reflektion för att inspektera objektets egenskaper - även privata.
Simon säger:
FirePHPCore har ett antal alternativ som kan ställas in för att begränsa inspektionsnivån till arrays och objekt. Du kan även skapa ett filter för objektegenskaper som du inte vill att den ska överföras till användaragenten.
Du kan läsa mer om FirePHPCore API på FirePHP Headquarters.
Det borde vara uppenbart för dig redan att det här kan hjälpa till med allmän debugging, men nu ska jag titta på några uppfinningsrika sätt att använda FirePHP.
Om du använder en enda frontkontrollen för att styra alla begäranden för och starta upp din app, kan du tid hur länge varje förfrågan till din ansökan tar att bearbeta på servern.
Någonting som detta skulle göra det:
Tänk på att detta inte är en representation av svarstid, bara kodens körtid - hur snabb servern kör koden innan du skickar det till användaragenten. Utgången måste fortfarande resa från din server till klienten över nätverket.
Simon säger:
Du kan använda YSlow-tillägget för Firebug för att spåra övergripande sidladdningstider och appresponsivitet.
Om du använder en central sökfunktion eller utökar en databaskontaktklass (till exempel mysqli) kan du pakka en timer kring synkrona frågor och kontrollera hur lång tid varje tar.
Du kan också notera SQL-frågorna själva. Faktum är att du kan sätta dessa två bitar av data tillsammans. Och skulle det inte vara trevligt att visa det i ett välstrukturerat bord?
Tja, Firebug har en bordstruktur och FirePHPCore har en omslag för det också:
Simon säger:
Jag har kastat ett par extrafunktioner här. I filen myDb.class.php, om $ result variabel kommer tillbaka falsk, det betyder att denna fråga misslyckades. Så jag använder FB :: fel () att flagga detta som ett fel i Firebug och visa mig frågan samt FB :: trace () för att visa mig processstapeln som leder fram till den dåliga frågan.
Den viktigaste saken här är FB :: tabell () metod. Detta skapar strukturerad felsökning information död lätt.
Nu när du instantierar din myDb-klass och utför en fråga, dyker den informationen för den frågan in i en array. Vi får sedan tillgång till den här arrayen senare för att bygga vårt FirePHP-tabell över alla frågor du utförde för den förfrågan, hur länge var och en och den totala körtiden för alla frågor.
Vad du har gjort här, med bara några rader av kod, skulle ha varit omöjligt med bara eko. Du kunde inte hoppas att få något så användbart på så kort tid. Det gör det möjligt för snabb felsökning.
Att använda FirePHPCore för AJAX-förfrågningar är ingen annorlunda än att använda den för synkrona förfrågningar. Använd bara funktionerna som du normalt skulle. När din app gör AJAX-förfrågningar kommer den extra informationen från FirePHP-huvudet att komma igenom och klientens sidoudvidelse behandlar det i Firebugs konsol. Vi provar det.
Skapa en ny fil som heter ajax.php i roten till din app. Ange följande kod där:
Nu i din test.php fil, lägg till följande efter ditt senaste FB :: info () samtal:
?>
Uppfriskande test.php i Firefox ska visa dig din "Click Me!" knapp. När du klickar på det, ska webbläsaren utföra en AJAX-förfrågan och ladda svaret (i detta fall ren text) i
.
Ännu viktigare, FirePHP lägger till en ny nod till Firebug som visar oss alla FirePHP-meddelanden som vi loggade in i ajax.php-filen.
4) Default Error Handler
Stick det här i början av din app och till och med otrevliga gamla PHP-fel får dumpas till Firebug!
set_error_handler ( 'myErrorHandler'); // Du kan lägga till valfria parametrar $ errfile, $ errline och $ errcontext för mer detaljer funktion myErrorHandler ($ errno, $ errstr) FB :: error ($ errstr, "Fel nummer". $ Errno); // Fortsätt med normal körningDetta är ett mycket renare och säkrare sätt att rapportera fel. Det blir ännu bättre om du visar dina appar på klienter medan de är i utveckling (och riskerar att producera icke kritiska fel). Om de inte använder Firefox, med Firebug och FirePHP, kommer de inte att se dessa hemliga fel , men du kommer ... i Firebug. Inte längre ändra dina felrapporteringsnivåer bara för att hålla sakerna städa! Nu är det snabbare utveckling.
säkerhet
Medan FirePHP är ett utmärkt verktyg för debugging under utveckling och testning, bör den inte vara kvar när en app går i produktion. Det kan eventuellt avslöja alldeles för mycket information om hur din app gör livet ännu enklare för hackare.
Självklart, om du ansluter till en webbplats via HTTPS, krypteras all information om huvudet som standard. Annars skickas det som vanlig text.
Det lägger också till en kostnad för din app som kan leda till en allvarlig minskning av prestanda och en dugg i din bandbredd.
Detta leder mig till en annan bra punkt om FirePHPCore: du kan lämna FirePHP-koden på plats, men den kommer inte att skicka några data om den är inaktiverad eller om den begärande användaragentsträngen inte innehåller den specifika FirePHP-referensen.
Om du absolut måste aktivera FirePHP på produktionsplatser, till exempel för fjärrfelsökning, se till att den är på en strömbrytare och glöm inte att stänga av den när du är klar. Något liknande:
definiera ("DEBUG_MODE", sant); FB :: setEnabled (false); om (DEBUG && $ _SESSION ['userIsAdmin']) FB :: setEnabled (true);Detta säkerställer att även om din DEBUG_MODE är satt till "true" (dvs. "on"), kommer endast en autentiserad administratörsession med en användaragent med FirePHP installerat att utlösa felsökningskoden och ta emot informationen om extra header.
Slutsats
FirePHP är ett briljant verktyg. Det har slits perfekt i mitt arbetsflöde. Eftersom det alltid finns där, bultat på verktygen som jag redan använder dagligen, har det blivit den andra naturen att använda.
Ännu viktigare, det har sparat min hud mer än några gånger. Jag har kunnat felsöka webbplatser i produktionen utan att behöva ta ned platserna. Det har gjort AJAX-felsökning en mycket verklig möjlighet och eftersom den är öppen källkod och fri att använda är kostnaden för adoption mycket låg.
Lägg till det här faktum att mina appar nu är mer portabla, jag har en bättre inblick i dem, och jag har lärt mig några nya tricks under vägen, vad som inte gillar?
Fler och fler webbutvecklare använder webbläsaren som deras främsta utvecklingsverktyg. Och varför inte? Det är där våra applikationer är avsedda att fungera. Så det verkar på något sätt mer naturligt att lägga profiler och felsökning direkt i webbläsaren. där vi tillbringar hela tiden vår debugging!
Tänk att det är dags att sluta använda eko nu? Grattis, Super Dev!
FirePHP skapades av Christoph Dorn. Version 0.3.1 är den nuvarande stabila versionen. 1.0 versionen är i utveckling och lovar några spännande nya funktioner.