Php kezdőknek

Php kezdőknek

Továbbra is közzé cikkeket a sorozat «PHP kezdőknek”, ezúttal fogunk összpontosítani a kimeneti puffer.

Ha azt szeretnénk, hogy röviden arról, hogy a szabványos kimeneti puffer PHP olvasható az oldalakon a hivatalos vezetés. de ez nem az én módszerem, beszélni fogok a példákat, és még, hogy biztosítsa a munka ad nekik az anyagot.

Kezdeni, így a telepítés - O pufferek PHP egy pár, plusz egy web-szerver modul alkalmas pufferelés, és még a böngészők is játszott a következtetést, és nem azonnal megjelenik az eredmény (lenne szükség itt frissíteni a memóriát, és még megemlíteni Netscape lehet nyúzott ).

Most fogok beszélni pufferelés a PHP.

Egyedi kimeneti puffer

Munka kimeneti puffer kezdődik ob_start () funkció - ez a funkció, van három paraméter, de fogok beszélni később, de ne felejtsük el - használja ob_start () függvény segítségével kapcsolja be a kimeneti puffer:

Ha azonban meg kell menteni az adatokat, vagy akár hogyan kell kezelni azt a következtetést, hogy szükségünk van ob_get_contents () függvényt. Mentse el az adatokat, akkor törölheti vagy letilthatja a puffer - erre használjuk a funkciót ob_end_clean (). Ha az összes fenti csökken egy halom, az eredmény megkapjuk a következő kódot:

Szinte az összes szükséges funkció előtaggal «ob_», ez nem nehéz kitalálni egy rövidítés az «kimeneti puffer»

ob_get_contents () függvény nevezhető többször a gyakorlatban még nem láttam ezt:

Ha elkezd a kimeneti puffer, de valamilyen oknál fogva nem záródott le, akkor a PHP fog tenni az Ön számára, és a végén a forgatókönyvet, hogy végre egy „reset” A kimeneti puffer a felhasználó böngészőjének

Ha belső ob_start blokk - ob_end elküld egy fejlécet, nem esnek a puffer, és azonnal küldeni a böngésző:

Ennek eredményeként, a kód jelenik meg a következő fejlécek http-csomag:

Természetesen ez a kód nem más, kijelzők lesz egy üres oldalt.

Ez a szabály a küldő fejlécek ugyanúgy igaz az a közvetlen hívás funkció header (). és implicit módon a hívás session_start ():

Itt van egy kis élet-hack - PHP segítségével zárójel <> kiemelni egy bizonyos logika a blokkokat, és nem funkcionális terhelés általuk, de az olvashatóság a kód - növekedés

Kissé tisztázta a helyzetet, - most a bank tudásunk van arról, hogyan kell engedélyezni a puffert adatokat fogadni, és hogyan kell kikapcsolni. Mi sokkal érdekesebb, akkor kap vele? Igen, gyakorlatilag semmit vele, és tényleg - el tudja küldeni (reset) a böngésző (kulcsszó flush), tiszta (tiszta), tiltsa (vége). Tehát mindezeket, amíg a halom is lehetséges:

  • ob_clean () - olvasni a nevét, a funkciója, mint a „tiszta kimeneti puffer”
  • ob_flush () - «Levél a kimeneti puffer”
  • ob_end_clean () - «letiltja a kimeneti puffer és tiszta”
  • ob_end_flush () - «A kimeneti puffer ki van kapcsolva, és elküldi a böngésző”
  • ob_get_clean () - «megkapjuk a kimeneti puffer, tisztítják és disable” - van egy kis eltérés a szabályokat, ezt a funkciót kell nevezik ob_get_end_clean (). de úgy döntöttünk, hogy egyszerűsítse és dobott vége
  • ob_get_flush () - «Levél a kimeneti puffer, tisztítjuk, és tiltsa», ob_get_ vége _flush ()

Mi lehet a következő köze a kimeneti puffer határozza meg a harmadik választható paraméter $ flags hívásakor ob_start () függvényt. ritkán használt

Az egyszerű emlékezés itt megtalálja a táblát a családi funkciók:

feladat
Töltse ki az alábbi kódot a hívó függvény, hogy helyesen következtetett «hello world»:

felvezető pufferben

Itt az ideje, hogy visszatérjen ob_start () függvényt, és az első paraméter - $ output_callback - kimeneti puffer kezelő. A visszahívási-funkció kerül a tartalmát a puffer bemeneti paraméterként, és a húr vissza kell térnie a kezelés után meg kell határozni, mint egy puffer felvezető:

Ebben a példában a függvény felvezető visszatérő vezetéken «hossza string»hello world«11”.

Egy fontos pont - ezeket a funkciókat kell, hogy legyen óvatos, feldolgozott sorok ladnenko, de ne próbálja meg, hogy minden adatot menteni, ne próbálja elindítani egy másik kimeneti puffer egy funkciót, és igen, vannak funkciók, amelyek létre a kimeneti puffer magadban, ez print_r () és a highlight_file ( ) egy példa

Találkozhatsz ob_gzhandler () a szabvány processzorokat. de jobb tömörítés oldal maradt a vállán a web-szerver, és ne tegye azt a PHP.

Több alkalommal, a második paraméter $ fázis visszahívási funkció lehetnek zászlók a család PHP_OUTPUT_HANDLER_ *. de ez az információ soha nem kell, én még nem gondol egy példa, hogy miért van szükség.

Php kezdőknek

A kimeneti puffer Keeler-funkció - lehet kezdeni egy másik puffer a puffer, és egy olyan új és így tovább (amíg elég memória):

Ebben a példában ob_flush () függvény és származékai ez lesz „dobja” a tartalmát a puffer egy magasabb szintre.

Ez a megközelítés segít, ha kell csatlakoztatni harmadik fél kódjában, és hirtelen tud venni valamit, és hogy - lenne bölcs dolog, hogy lezárja a kimenetet a puffer is, ha az összes kód már csomagolva egy puffer.

Ha nem tudja pontosan, mit jelent a „mélység” vannak - használata ob_get_level () függvényt. és „felébredjen” hasznos az Ön számára a következő kódot:

feladat
Hogy módosítsa a kódot ob_start () egymásba ágyazott, hogy a számok jelennek meg fordított sorrendben, erre szükség van, hogy rendezni a három sornyi kódot.

„Alapértelmezett” pufferben

Ha azt szeretnénk, hogy hozzon létre egy wrapper az egész kódot, akkor lehetséges, hogy a megoldás „out of the box” - „default” kimeneti puffer aktiváláshoz ezek megfelel output_buffering irányelvet. ez lehet tenni a Be. és adja meg a puffer mérete, hogy szükségünk van (amikor a limit elérésekor a puffer kell küldeni a felhasználó böngészőjének). Ezt az irányelvet kell tüntetni vagy a php.ini-ben, vagy .htaccess (Apache), kísérlet arra, hogy ezt az értéket használja ini_set (), hogy semmit nem vezet, mint PHP már megkezdheti az övé, és a kimeneti puffer már be van állítva a beállítások szerint:

Ha amikor a puffert, hogy ellenőrizze a beágyazási szint és okozhat ob_get_level () függvény. megkapjuk 1:

Ie ha tartalmazza a puffer, akkor elkerülhető az a fajta «headers already sent» hiba? Igen, amíg elég puffert, de soha nem, sőt támaszkodva ez a módszer, akkor tulajdonképpen bomba ültettek, és nem tudjuk, mikor „felrobban”, és szórják hibák:

Ne felejtsük el, hogy az irányelv CLI alkalmazások output_buffering mindig 0; Ez a puffer van tiltva

Miért ez az egész?

Jó kérdés - miért dolgozni a kimeneti puffer? Íme néhány alapvető módja:

  1. Tömörítés átvitt adatok - a már említett ob_gzhandler ()
  2. Késleltetett visszavonása hogy elkerüljék a hibákat «headers already sent» (a hiba részletes leírása a Session)
  3. Munka más emberek kód, amely igyekszik saját valamit kimenet
  4. Munka HTML fájlokat, ha kell csatlakoztatni egy szöveges fájlt (általában az a kérdés, HTML), a további munkához annak tartalmával

hibakezelés script tartalmazzák kép - startuete puffer fejléc fájlokat, ha valami elromlik, akkor a tartalmát a puffer lehet dobni, és ahelyett, hogy uninformative hibaüzenetek, kimenetre legalább egy informatív üzenetet, hogy a szerver nem érzi jól magát, és nem lehet mást.
Példa dolgozó kritikus hibák megtalálja a cikkben hibakezelés. és van is utalt a kimeneti puffer, ó látta az egészet jól Well Well-hátsó szándék

A rendszer kimeneti puffer

A felhasználói kimeneti puffer érteni, nézzük lépni a rendszerbe - ez a kijelző puffer, amely tele van a végrehajtása során a forgatókönyvet, és elküldte a böngésző végén végrehajtását. Ie A kimeneti puffer mindig ott van, nem szükséges létrehozni, de nem tudjuk kezelni.

Ez annyira egyszerű és tömör, nos, most körülbelül az árnyalatok rendszer kimeneti puffer ...

Royal flush

10 másodperc a figyelmet ...

És most a tudományos érdeklődés, nézzük meg a végrehajtás a „cselekvés” - van egy kicsit a kódot, és egy maroknyi hasznos ismereteket PHP:

Azonnal sújtotta a hívás flush () függvény - hívja ezt a funkciót, akkor ad jelzést PHP «vissza» rendszer puffert, azaz küldje el az összes, hogy van a felhasználó böngészőjének (de vigyázz, ha kezdődött a felhasználói puffer, akkor először meg kell „veszíteni”, és csak akkor hívja flush ()). Ie egy esemény lehet leírni, mint:

Egy másik funkció, amelyben meg kell emlékezni - implicit_flush irányelvet. Ő a felelős azért, hogy miután minden egyes kimeneti automatikusan hívja flush (). Ezért a következő kombinációját munka az előző példában:

Ez az irányelv lehet változtatni a „röptében”, ez elegendő ahhoz, hogy ob_implicit_flush () függvény (next meglepő költség funkciót továbbra is nevezik implicit_flush (), mint a puffer kimenetét a felhasználónak azt, hogy a közvetett aránya -. Miután hívja ob_flush () lesz nevezett flush ()):

Ezek a példák akkor működnek, ha az off output_buffering. különben meg kell kényszeríteni, hogy kapcsolja ki, és egyértelmű a forgatókönyvet. Ha a munka a CLI, akkor tudja implicit_flush mindig ki- és output_buffering így valamennyi kiadási azonnal esik a konzol

Ahhoz, hogy ezt a feladatot meg kell ismételni az összefüggésben fájl

Hogy megszilárdítsa a vizsgált anyag, meg kell végrehajtani egy egyszerű sablonrendszer hogy újjáéleszteni a következő kódot:

ajánlott irodalom

Összefoglalva

A téma a pufferelés akkor újra és újra vissza, miközben dolgozik a PHP projektek, és hidd el, meg kell tudni, és megérteni, hogy mi pont „beragadt” a következtetés, hogy ne pazarolja az idejét dolgozik a diagnózis kódot, és közvetlenül a problémák okainak.

információ