FirePHP este un plugin pentru Firefox și o combinație de biblioteci de pe server care vă permite să trimiteți la browser-ul dvs. tot felul de informații suculente din aplicația dvs. web, la fel ca funcția console.log () cu JavaScript. În acest tutorial PLUS și ecranul însoțitor, vă vom învăța cum să începeți încă de la început!
Acest tutorial include un screencast disponibil pentru membrii Tuts + Premium.
Deci credeți că sunteți un dezvoltator de web minunat, nu? Nu citiți până când nu treceți prima provocare: răspundeți (sincer) "adevărat" sau "fals" despre următoarele afirmații:
Dacă ați răspuns tuturor celor trei cu un "adevărat" răsunător, dați-vă un pic pe spate. Te voi ierta că nu ai numărul trei, dar dacă nu folosești Firefox cu Firebug ... unde ai fost!?
Veți avea nevoie de acest combinație câștigătoare pentru a finaliza acest tutorial. Ultimul lucru de care veți avea nevoie - să deveniți acel mare-maestru, uber-dezvoltator, codificator al visei dvs. - este cea mai importantă parte: FirePHP.
FirePHP este o combinație de firefox și o combinație de biblioteci de la server care vă permite să trimiteți tot felul de informații suculente din aplicația dvs. web către browser-ul dvs., într-un mod mai plăcut decât cel obișnuit:
echo $ variable;
Acest cod este atât de comun. Uneori se pare că este cel mai rapid mod de a spulbera valoarea $ variabila astfel încât să știți ce este la un moment dat de executare a codului.
Dar dacă $ variabila nu este un șir sau un număr întreg; ce se întâmplă dacă este un tip dat complex ca o matrice sau un obiect? În PHP, codul de mai sus nu ar fi atât de util:
"Folosiți doar print_r (variabilă $);" Am auzit că spui. Pantaloni de încredere, dar asta nu e foarte elegant. Încercarea de a găsi valoarea unui element de matrice în această mizerie este o durere. Și încă nu rezolvă obiecte!
Când vedeți ce poate face FirePHP, vă veți răzgândi! Se transformă depanarea într-un proces surprinzător de plăcut și rezultă într-un cod mult mai portabil.
În acest tutorial vă voi arăta cum să configurați FirePHP în aplicația dvs. și câteva modalități excelente de ao utiliza pentru a accelera dezvoltarea și depanarea.
Dacă nu ați instalat extensia FirePHP, instalați-o acum.
Extensia FirePHP (pe care o voi referi ca FirePHP de acum încolo) se bazează în totalitate pe Firebug, deci veți avea nevoie și de asta. Clasele din partea serverului (pe care le voi numi FirePHPCore) sunt disponibile ca o bibliotecă independentă. Există, de asemenea, un număr de pluginuri pentru cadrele populare și CMS-urile populare.
Simon spune:
Deși numele sugerează altfel, FirePHP nu este doar pentru dezvoltatorii PHP. Utilizează setul propriu de anteturi HTTP pentru a trimite informații din aplicația dvs. către browser, astfel încât să poată fi ușor portat în alte limbi. Există biblioteci din partea serverului disponibile pentru ASP, Ruby, Python și multe altele. Dacă nu există o limbă pentru dvs., puteți întotdeauna să vă provocați și să vă scrieți propria voastră.
De asemenea, acest lucru este ideal pentru depanarea AJAX deoarece înseamnă că răspunsurile asincrone sunt conținutul curat care conține doar ieșirea pe care doriți să o vedeți - nu codul de depanare.
Continuați și descărcați biblioteca preferată de la server. În acest tutorial, mă voi concentra pe utilizarea bibliotecii de bază independente. Instrucțiunile pentru configurarea altor biblioteci pot fi găsite în wiki-ul FirePHP.
Simon spune:
Dacă aveți configurație PEAR și preferați să o utilizați, pur și simplu tastați următoarele două linii la linia de comandă:
perete canal-descoperi pear.firephp.org pear install firephp / FirePHPCore
După ce dezarhivați pachetul, mergeți în lib folder și copiați FirePHPCore folder pe serverul dvs. web sau aplicația include folderul.
Simon spune:
Unul dintre marile lucruri despre FirePHPCore stand-alone este suportul pentru PHP4. Deci, puteți chiar să conectați-l la unele dintre site-urile retro pe care încă le executați!
Ca și în cazul tuturor tutorialelor de codare bune, vom începe cu un exemplu de bază, "Hello, World" de la FirePHP.
Creați un nou document PHP gol. O să sun pe a mea test.php. Salvați-l în rădăcina aplicației dvs..
Pentru ca FirePHPCore să-și facă munca, trebuie să activați tamponarea de ieșire. Citiți mai multe despre acest lucru, dacă nu l-ați folosit mai devreme, este un obicei bun să intrați oricum.
Desigur, nu trebuie să uităm să includeți biblioteca FirePHPCore. Dacă rulați pe PHP5, adăugați acest lucru în partea de sus a fișierului:
include_once ('include / FirePHPCore / fb.php');
Dacă executați PHP4, includeți fb.php4 fișier în loc.
Simon spune:
Nu este necesar să includeți fișierul de clasă deoarece acesta este inclus în fișierul fb.php.
Acum putem începe trimiterea la consola Firebug. Introduceți următoarele după ob_start () si inainte ob_end_flush ():
FB :: info ("Hello, FirePHP");
Simon spune:
FirePHPCore are un API procedural și orientat pe obiecte. Nu există nicio diferență între cele două și puteți folosi oricare preferați.
De asemenea, utilizează modelul singleton pentru a economisi memorie și vine cu o clasă de ajutoare complet statice, pe care prefer să o folosesc deoarece necesită mai puțin codificare.
Deschideți Firefox, porniți Firebug și accesați această pagină. Ar trebui să obțineți ceva de genul:
Cat de tare e asta!? Ei bine, nu este un demo foarte interesant, așa că să încercăm ceva mai complicat.
Să vedem ce se întâmplă când trecem într-o variabilă complexă. Vom construi o matrice și vom vedea ce primim. Adăugați următorul cod imediat după ultimul apel FB :: info ():
$ array ['key1'] = 'un anumit conținut'; $ array ['altKey'] [] = 1234; $ array ['altKey'] [] = 5678; $ array ['altKey'] [] = 9012; $ array [] = null; FB :: info ($ array, 'My Array Test');
Salvați acum, mergeți la Firefox și reîmprospătați.
Bine, arată bine ... dar, stai puțin, unde e tot outputul? Plasați cursorul peste noua linie.
Wow. Cadrul Firebug ne arată toate datele din matricea noastră - nu doar elemente de matrice de nivel 1, dar și cele de nivel inferior - și într-un mod lizibil, lizibil.
Ea devine și mai interesantă cu obiectele! FirePHPCore folosește pe deplin reflecția pentru a inspecta proprietățile unui obiect - chiar și cele private.
Simon spune:
FirePHPCore are o serie de opțiuni care pot fi setate pentru a limita nivelul de inspecție în tablouri și obiecte. Puteți crea chiar un filtru pentru proprietățile obiectului pe care nu doriți ca acesta să le transmită agentului utilizator.
Puteți afla mai multe despre API-ul FirePHPCore la sediul companiei FirePHP.
Ar trebui să vă fie deja evident că acest lucru vă poate ajuta cu depanarea generală, dar acum mă voi uita la câteva modalități inventive de utilizare a FirePHP.
Dacă utilizați un singur controler frontal pentru a direcționa toate cererile și pentru a bootstrap aplicația dvs., puteți avea timp cât durează fiecare cerere din partea aplicației dvs. pentru a procesa pe server.
Ceva de genul asta ar face-o:
Rețineți că aceasta nu este o reprezentare a timpului de răspuns, numai timpul de execuție a codului - cat de repede serverul dvs. executa codul înainte de al trimite agentului utilizator. De ieșire trebuie să călătoriți din serverul dvs. către client în întreaga rețea.
Simon spune:
Ai putea folosi extensia YSlow pentru Firebug pentru a urmări timpul de încărcare a paginilor și răspunsul la aplicații.
Dacă utilizați o funcție de interogare centrală sau extindeți o clasă de conectori de baze de date (cum ar fi mysqli), puteți împacheta un cronometru în jurul oricăror interogări sincrone și puteți verifica cât durează fiecare dintre ele.
De asemenea, puteți face o notă a interogărilor SQL. De fapt, ai putea pune împreună aceste două biți de date. Și nu ar fi frumos să afișezi asta într-o masă bine structurată?
Ei bine, Firebug are o structură de tabelă, iar FirePHPCore are un ambalaj pentru asta:
Simon spune:
Am aruncat niște plusuri aici. În fișierul myDb.class.php, dacă $ rezultat variabila revine fals, înseamnă că această interogare a eșuat. Deci, eu folosesc FB :: eroare () să semnaleze acest lucru ca o eroare în Firebug și să-mi arăt interogarea, precum și FB :: trace () pentru a-mi arăta stiva de proces care duce la interogarea necorespunzătoare.
Lucrul cheie aici este FB :: tabelul () metodă. Acest lucru face posibilă crearea de informații structurate de depanare mort ușor.
Acum, când instanțiați clasa myDb și executați o interogare, aceasta afișează detaliile respectivei interogări într-o matrice. Apoi, accesăm matricea ulterioară pentru a construi tabelul nostru FirePHP pentru toate interogările pe care le-ați executat pentru acea solicitare, cât timp a luat fiecare și durata totală de execuție a tuturor interogărilor.
Ce ați făcut aici, cu doar câteva rânduri de cod, ar fi fost imposibil doar cu asta ecou. N-ați putea să sperați să obțineți ceva atât de util într-o perioadă atât de scurtă. Acest lucru face ca unele bug-uri rapide.
Utilizarea FirePHPCore pentru solicitările AJAX nu este diferită decât utilizarea acesteia pentru cereri sincrone. Pur și simplu utilizați funcțiile așa cum ați proceda normal. Atunci când aplicația dvs. face o solicitare AJAX, informațiile suplimentare despre antetul FirePHP revin și extensia clientului o procesează în consola Firebug. Hai sa incercam.
Creați un fișier nou numit ajax.php în rădăcina aplicației dvs. Introduceți codul de mai jos:
Acum în tine test.php fișier, adăugați următoarele după ultimul apel FB :: info ():
?>
Reîmprospătarea test.php în Firefox ar trebui să vă arate "faceți clic pe mine!" buton. Când faceți clic pe el, browserul ar trebui să efectueze o solicitare AJAX și să încarce răspunsul (în acest caz text simplu) în
.
Mai important, FirePHP adaugă un nou nod la Firebug care ne arată toate mesajele FirePHP pe care le-am înregistrat în fișierul ajax.php.
4) Handler de eroare implicit
Urmați acest lucru la începutul aplicației dvs. și chiar erorile vechi ale PHP devin încărcate la Firebug!
set_error_handler ( 'myErrorHandler'); // Puteți adăuga parametrii opționali $ errfile, $ errline și $ errcontext pentru funcția detaliată myErrorHandler ($ errno, $ errstr) FB :: eroare ($ errstr, 'Numărul erorii' $ errno); // Continuați cu execuția obișnuităAcesta este un mod mult mai curat și mai sigur de a raporta erorile. Ea devine și mai bună dacă vă demonstrați aplicațiile clienților în timp ce se află în dezvoltare (și cu riscul producerii unor erori non-critice) - dacă nu utilizează Firefox, cu Firebug și FirePHP, nu vor vedea aceste erori , dar vei ... în Firebug. Nu mai schimbați nivelurile de raportare a erorilor doar pentru a menține lucrurile ordonate! Acum este o dezvoltare mai rapidă.
Securitate
În timp ce FirePHP este un instrument excelent pentru depanare în timpul dezvoltării și testării, nu ar trebui să rămână în momentul în care o aplicație intră în producție. Poate dezvălui prea multe informații despre aplicația dvs., făcând viața chiar mai ușoară pentru hackeri.
Desigur, dacă vă conectați la un site prin HTTPS, toate informațiile din antet sunt criptate ca standard. În caz contrar, este trimis ca text simplu.
De asemenea, adaugă o aplicație a aplicației care ar putea duce la o reducere serioasă a performanței și la o dentare în lățimea de bandă.
Acest lucru mă aduce la un alt moment excelent despre FirePHPCore: puteți lăsa codul FirePHP în loc, dar nu va trimite date dacă este dezactivat sau dacă șirul de agent de utilizator solicitant nu conține referința firefox specifică.
Dacă absolut trebuie să activați FirePHP pe site-urile de producție, de exemplu pentru depanare la distanță, asigurați-vă că este pe un switch și nu uitați să îl opriți când ați terminat. Ceva asemănător cu:
define ('DEBUG_MODE', true); FB :: setEnabled (false); dacă (DEBUG && $ _SESSION ['userIsAdmin']) FB :: setEnabled (adevărat);Acest lucru vă asigură că, chiar dacă DEBUG_MODE dvs. este setat la "true" (adică "activat"), numai o sesiune de administrator autentificată care utilizează un agent utilizator cu FirePHP instalat va declanșa codul de depanare și va primi informațiile extra header.
Concluzie
FirePHP este un instrument genial. Ea sa împletit perfect în fluxul meu de lucru. Pentru că este întotdeauna acolo, prins pe uneltele pe care le folosesc deja zilnic, a devenit a doua natură de folosit.
Mai important, mi-a salvat pielea de mai multe ori. Am reușit să depanez site-uri în producție fără a fi nevoie să le iau în jos. Ajustarea AJAX a făcut posibilă o posibilitate foarte reală și, datorită faptului că este deschisă și gratuită, costul adoptării este extrem de scăzut.
Adăugați la aceasta faptul că aplicațiile mele sunt acum mai portabile, am o mai bună înțelegere a acestora și am învățat câteva trucuri noi pe parcurs, ce nu vă place?
Din ce în ce mai mulți dezvoltatori web folosesc browserul ca instrument principal de dezvoltare. De ce nu? Aici intenționează să funcționeze aplicațiile noastre. Deci pare oarecum mai natural să punem profilul și depanarea chiar în browser; unde ne petrecem majoritatea timpului de depanare oricum!
Gândiți-vă că este timpul să vă opriți ecou acum? Felicitări, Super-Dev!
FirePHP a fost creat de Christoph Dorn. Versiunea 0.3.1 este versiunea stabilă actuală. Versiunea 1.0 este în curs de dezvoltare și promite câteva noi caracteristici interesante.