|
|
(En mellanliggande sidversion av samma användare visas inte) |
Rad 1: |
Rad 1: |
| == Användar-Nivå Buffertar för Utmatning ==
| | PHP:s användarnivåbuffertar för utmatning buffrar all utmatning efter att de har startats tills de stängs av eller skriptet avslutas. Utmatning i sammanhanget för PHP:s användarnivåbuffert är allt som PHP skulle visa eller skicka tillbaka till webbläsaren. I praktiska termer är utmatning data med icke-nollängd som är: |
|
| |
|
| === Innehållsförteckning ===
| | * utanför <?php ?>-taggarna |
| * Vad buffras i utmatningen? | | * skrivet ut av språkstrukturer och funktioner vars uttryckliga syfte är att skicka ut användartillhandahållna variabler eller strängar, såsom [[echo]], [[print]], [[printf()]], [[var_dump()]], [[var_export()]], [[vprintf()]] |
| * Nästling av utmatningsbuffertar | | * skrivet ut av funktioner vars syfte är att samla och skicka ut data/information om det körande skriptet eller PHP, såsom [[debug_print_backtrace()]], [[phpcredits()]], [[phpinfo()]], [[ReflectionExtension::info()]] |
| * Buffertstorlek | | * skrivet ut av PHP vid ett okänt undantag eller ett ohanterat fel (beroende på inställningarna för [[display_errors]] och [[error_reporting]]) |
| * Tillåtna operationer på buffertar | | * allt som skrivs till [[php://output]] |
| * Utmatningshanterare
| |
| * Arbete med utmatningshanterare | |
| * Flaggor som skickas till utmatningshanterare
| |
| * Returvärden från utmatningshanterare
| |
|
| |
|
| Användarnivåns utmatningsbuffertar kan startas, manipuleras och avslutas från PHP-kod. Varje buffert inkluderar en utmatningsbuffert och en associerad utmatningshanterarfunktion.
| | ''Observera:'' Data som skrivs direkt till stdout eller skickas till en SAPI-funktion med liknande funktionalitet kommer inte fångas av utmatningsbuffertarna på användarnivå. Detta inkluderar att skriva data till stdout med [[fwrite()]] eller att skicka headers med [[header()]] eller [[setcookie()]]. |
|
| |
|
| === Aktivera Utmatningsbuffring === | | = Sidslut = |
| Utmatningsbuffring kan aktiveras genom att använda funktionen <pre>ob_start()</pre> eller genom att ställa in <pre>output_buffering</pre> och <pre>output_handler</pre> i php.ini. Även om båda kan skapa utmatningsbuffertar, är <pre>ob_start()</pre> mer flexibel eftersom den accepterar användardefinierade funktioner som utmatningshanterare och tillåter att operationerna som är tillåtna på bufferten (flusha, rensa, ta bort) kan ställas in också. Buffertar som startas med <pre>ob_start()</pre> kommer vara aktiva från den rad som funktionen anropades, medan de som startas med <pre>output_buffering</pre> kommer buffra utdata från den första raden i skriptet.
| |
|
| |
|
| PHP levereras också med en inbyggd "URL-Rewriter" utmatningshanterare som startar sin egen utmatningsbuffert och endast tillåter upp till två instanser av den att köra samtidigt (en för användarnivå URL-omskrivning och en för transparent sessions-ID-stöd). Dessa buffertar kan startas genom att anropa funktionen <pre>output_add_rewrite_var()</pre> och/eller genom att aktivera <pre>session.use_trans_sid</pre> i php.ini.
| | Orginalhemsidan på Engelska :https://www.php.net/manual/en/outcontrol.what-output-is-buffered.php |
|
| |
|
| Den bundna zlib-tillägget har sin egen utmatningsbuffert som kan aktiveras genom att använda inställningen <pre>zlib.output_compression</pre> i php.ini.
| | [[PHP]] |
| | [[Funktioner]] |
| | [[Funktionsreferens]] |
|
| |
|
| ''Observera:'' Även om "URL-Rewriter" är speciell i den meningen att den endast tillåter upp till två instanser av den att köra samtidigt, använder alla utmatningsbuffertar på användarnivå samma underliggande buffertar som används av <pre>ob_start()</pre> med deras funktionalitet implementerad av en anpassad utmatningshanterarfunktion. Som sådan kan all deras funktionalitet emuleras av användarkod.
| | <HR> |
| | Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på |
| | https://www.linux.se/kontaka-linux-se/ |
| | <BR><BR>Tack till [https://datorhjalp.se Datorhjälp] som har sponsrat [https://www.linux.se Linux.se] med webserver. |
|
| |
|
| === Flusha, Åtkomst till och Rensa Buffertinnehåll ===
| |
| Flushning skickar och rensar innehållet i den aktiva bufferten. Utmatningsbuffertar flushas när storleken på utmatningen överstiger buffertens storlek; när skriptet avslutas eller när <pre>ob_flush()</pre>, <pre>ob_end_flush()</pre> eller <pre>ob_get_flush()</pre> anropas.
| |
|
| |
|
| ''Varning:'' Anrop av <pre>ob_end_flush()</pre> eller <pre>ob_get_flush()</pre> kommer att stänga av den aktiva bufferten.
| | [[Kategori:Php]] |
| | | [[Kategori:Utmatningskontroll]] |
| ''Varning:'' Flushning av buffertar kommer att flusha returvärdet från utmatningshanteraren vilket kan skilja sig från innehållet i bufferten. Till exempel, genom att använda <pre>ob_gzhandler()</pre> komprimeras utmatningen och flushar den komprimerade utmatningen.
| |
| | |
| Innehållet i den aktiva bufferten kan hämtas genom att anropa <pre>ob_get_contents()</pre>, <pre>ob_get_clean()</pre> eller <pre>ob_get_flush()</pre>.
| |
| | |
| Om endast längden på buffertens innehåll behövs, kommer <pre>ob_get_length()</pre> eller <pre>ob_get_status()</pre> att returnera längden på innehållet i bytes.
| |
| | |
| ''Varning:'' Anrop av <pre>ob_get_clean()</pre> eller <pre>ob_get_flush()</pre> kommer att stänga av den aktiva bufferten efter att ha returnerat dess innehåll.
| |
| | |
| Innehållet i den aktiva bufferten kan rensas genom att anropa <pre>ob_clean()</pre>, <pre>ob_end_clean()</pre> eller <pre>ob_get_clean()</pre>.
| |
| | |
| ''Varning:'' Anrop av <pre>ob_end_clean()</pre> eller <pre>ob_get_clean()</pre> kommer att stänga av den aktiva bufferten.
| |
| | |
| === Stänga Av Buffertar ===
| |
| Utmatningsbuffertar kan stängas av genom att anropa <pre>ob_end_clean()</pre>, <pre>ob_end_flush()</pre>, <pre>ob_get_flush()</pre> eller <pre>ob_get_clean()</pre>.
| |
| | |
| ''Varning:'' Utmatningsbuffertar som startats utan flaggan <pre>PHP_OUTPUT_HANDLER_REMOVABLE</pre> kan inte stängas av och kan generera en E_NOTICE.
| |
| | |
| Varje utmatningsbuffert som inte har stängts av i slutet av skriptet eller när <pre>exit()</pre> anropas kommer att flushas och stängas av av PHP:s avstängningsprocess. Buffertarna kommer att flushas och stängas av i omvänd ordning av deras start. Den sista bufferten som startades kommer att vara först, den första bufferten som startades kommer att vara sist att flushas och stängas av.
| |
| | |
| ''Varning:'' Om flushning av buffertens innehåll inte önskas, bör en anpassad utmatningshanterare användas för att förhindra flushning under avstängning.
| |
| | |
| === Undantag som Slängs i Utmatningshanterare ===
| |
| Om ett icke fångat undantag slängs i en utmatningshanterare, avslutas programmet och hanteraren anropas av avstängningsprocessen, varefter felmeddelandet "Icke fångat undantag" flushas.
| |
| | |
| Om det icke fångade undantaget slängs i en hanterare som anropas av <pre>ob_flush()</pre>, <pre>ob_end_flush()</pre> eller <pre>ob_get_flush()</pre>, flushas buffertens innehåll före felmeddelandet.
| |
| | |
| Om ett icke fångat undantag slängs i en utmatningshanterare under avstängning, avslutas hanteraren och varken buffertens innehåll eller felmeddelandet flushas.
| |
| | |
| ''Observera:'' Om en hanterare slänger ett undantag, sätts dess statusflagga <pre>PHP_OUTPUT_HANDLER_DISABLED</pre>.
| |
| | |
| === Fel som Uppstår i Utmatningshanterare ===
| |
| Om ett icke-fatalt fel uppstår i en utmatningshanterare fortsätter programmet att köra.
| |
| | |
| Om det icke-fatala felet uppstår i en hanterare som anropas av <pre>ob_flush()</pre>, <pre>ob_end_flush()</pre> eller <pre>ob_get_flush()</pre>, flushas bufferten beroende på returvärdet från hanteraren. Om hanteraren returnerar false, flushas både bufferten och felmeddelandet. Om den returnerar något annat, flushas hanterarens returvärde men inte felmeddelandet.
| |
| | |
| ''Observera:'' Om en hanterare returnerar false, sätts dess statusflagga <pre>PHP_OUTPUT_HANDLER_DISABLED</pre>.
| |
| | |
| Om ett fatalt fel uppstår i en utmatningshanterare, avslutas programmet och hanteraren anropas av avstängningsprocessen, varefter felmeddelandet flushas.
| |
| | |
| Om det fatala felet uppstår i en hanterare som anropas av <pre>ob_flush()</pre>, <pre>ob_end_flush()</pre> eller <pre>ob_get_flush()</pre>, flushas buffertens innehåll före felmeddelandet.
| |
| | |
| Om ett fatalt fel uppstår i en utmatningshanterare under avstängning, avslutas programmet utan att flush bufferten eller felmeddelandet.
| |
| | |
| === Utmatning i Utmatningshanterare ===
| |
| I specifika omständigheter, flushas utmatning som produceras i hanteraren tillsammans med innehållet i bufferten. Denna utmatning läggs inte till i bufferten och är inte en del av strängen som returneras av <pre>ob_get_flush()</pre>.
| |
| | |
| Under flush-operationer (anrop av <pre>ob_flush()</pre>, <pre>ob_end_flush()</pre>, <pre>ob_get_flush()</pre> och under avstängning) om returvärdet från en hanterare är false, flushas innehållet i bufferten följt av utmatningen. Om hanteraren inte anropas under avstängning, resulterar hanteraren som slänger ett undantag eller anrop av <pre>exit()</pre> i samma beteende.
| |
| | |
| ''Observera:'' Om en hanterare returnerar false, sätts dess statusflagga <pre>PHP_OUTPUT_HANDLER_DISABLED</pre>.
| |
| | |
| === Statusflaggor för Utmatningshanterare ===
| |
| Hanterarens statusflaggor i buffertens flaggmask sätts varje gång utmatningshanteraren anropas och är en del av flaggorna som returneras av <pre>ob_get_status()</pre>. Om hanteraren exekveras framgångsrikt och inte returnerar false, sätts <pre>PHP_OUTPUT_HANDLER_STARTED</pre> och <pre>PHP_OUTPUT_HANDLER_PROCESSED</pre>. Om hanteraren returnerar false eller slänger ett undantag under exekvering, sätts <pre>PHP_OUTPUT_HANDLER_STARTED</pre> och <pre>PHP_OUTPUT_HANDLER_DISABLED</pre>.
| |
| | |
| ''Observera:'' Om <pre>PHP_OUTPUT_HANDLER_DISABLED</pre> är satt för en hanterare kommer hanteraren inte att anropas av <pre>ob_end_clean()</pre>, <pre>ob_end_flush()</pre>, <pre>ob_get_clean()</pre>, <pre>ob_get_flush()</pre> eller under PHP:s avstängningsprocess. Denna flagga har ingen effekt när <pre>ob_clean()</pre> eller <pre>ob_flush()</pre> anropas.
| |