Php de ieșire tampon

Pagina 1 din 4

tampon de ieșire în PHP este un lucru destul de util, dacă știi cum să-l folosească. Spune-mi câte ori ați văzut tipul de eroare:

Atenție: Nu se poate modifica informații de antet - antetele deja trimis de (producție a început la.)







De obicei, acest lucru se întâmplă atunci când doriți să trimiteți un cookie, sau pentru a efectua operațiuni care contribuie la transportul acestora, sau alte operațiuni care să conducă la trimiterea antete, cum ar fi lansarea unui antet sesiune sau aplicație funcție sau altele asemenea. Sau fișierul este codificat în Unicode, iar la începutul pândea BOM - Byte Order Mark. Acesta lucru este podlyuschaya, spațiu non-rupere cu lățime zero. Uită-te sub „comanda octet“ titlul.

Posibilitatea de tamponare

Folosind tampon de ieșire, putem:

  • Trimite un cookie de oriunde în script.
  • Pentru a începe o sesiune în orice moment.
  • Comprimare date înainte de a trimite-l la utilizator.

Compresia de sarcină suplimentară pe procesor, cu toate acestea, volumul de trafic pe o singură pagină va scădea cu aproximativ patruzeci de procente, ceea ce înseamnă că serverul va petrece mai puțin timp transmiterea de date prin rețea. Cantitatea de compresie depinde de mai mulți factori, cum ar fi imaginea comprimată mai rău decât textul.

Ce se întâmplă când tamponarea?







Când ieșire tampon, mecanism PHP stivuite toate producția de script-ul, în paralel, pentru a forma un pachet HTTP - antete, inclusiv antetele și adăugarea la „cookie“, precum și orice alte persoane care sunt obținute ca urmare a scriptului. Apoi, atunci când script-ul a lucrat el ia și trimite totul la client, în ordinea corectă: prima antete, iar apoi pagina - rezultatul scenariului.

Cum se activează tampon de ieșire?

Prima cale este dacă un server este a ta, sau pur și simplu aveți acces la fișierul php.ini (așa cum am scris mai sus) sunt în căutarea în ea output_buffering directivă și atribuie o valoare On. Acest tampon este activată pentru toate script-uri.

A doua modalitate este de a utiliza funcția ob_start () în scenariu, concluzia că trebuie să fie tamponate. Această metodă este de preferat - veți obține o mulțime de flexibilitate / de control în muncă, precum și o mai bună portabilitate.

În opinia mea, destul de convenabil să ia în considerare tamponarea de ieșire sub forma unor containere - tampoane. Este mai ușor de înțeles munca lor.

Deci, pentru a deschide un astfel de container - tamponul poate fi doar o singură funcție ob_start (). dar acest lucru este tamponul pentru a închide, aveți două funcții: ob_end_flush () și ob_end_clean ()

Închide tampon și trimite datele.

Închide buffer fără a trimite date.

Tot conținutul care este afișat în momentul în care tamponul devine deschis în tampon și nu va fi trimis. De exemplu:

Acest script afiseaza rezultatul:

Să înțelegem ce sa întâmplat. Am creat trei tampoane. Rânduri 1-3 - aceasta este prima. El a închis ob_end_flush funcția () - concluzia lui putem vedea rezultatul.

În al doilea rând tampon - o linie de 5-7. Acesta este închis de o funcție ob_end_clean () - astfel încât producția sa pierdut bezsledno.

Solutia tampon - o linie de 9-10. El nu este închis în nici un fel! - Shozanah? - Tu întrebi. Este simplu - la sfârșitul script-ul, PHP se închide automat toate tampoane ca și în cazul în care acestea au fost închise ob_end_flush funcția ().