Användarnivå Output Buffertar: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
 
(2 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
== Användar-Nivå Buffertar för Utmatning ==
== Användar-Nivå Buffertar för Utmatning ==
=== Innehållsförteckning ===
=== Innehållsförteckning ===
* Vad buffras i utmatningen?
* [[Vad buffras i utmatningen?]]
* Nästling av utmatningsbuffertar
* [[Nästling av utmatningsbuffertar]]
* Buffertstorlek
* [[Buffertstorlek]]
* Tillåtna operationer på buffertar
* [[Tillåtna operationer på buffertar]]
* Utmatningshanterare
* [[Utmatningshanterare]]
* Arbete med utmatningshanterare
* [[Arbete med utmatningshanterare]]
* Flaggor som skickas till utmatningshanterare
* [[Flaggor som skickas till utmatningshanterare]]
* Returvärden från utmatningshanterare
* [[Returvärden från utmatningshanterare]]


Utmatningsbuffertar på användarnivå kan startas, manipuleras och avslutas från PHP-kod. Varje buffert inkluderar en utmatningsbuffert och en associerad utmatningshanterarfunktion.
Utmatningsbuffertar på användarnivå kan startas, manipuleras och avslutas från PHP-kod. Varje buffert inkluderar en utmatningsbuffert och en associerad utmatningshanterarfunktion.


=== Aktivera Utmatningsbuffring ===
=== Aktivera Utmatningsbuffring ===
Utmatningsbuffring kan aktiveras med funktionen <code>[[ob_start()]]</code> eller genom att ställa in <code>output_buffering</code> och <code>output_handler</code> i php.ini. Även om båda kan skapa utmatningsbuffertar är <code>ob_start()</code> mer flexibel eftersom den accepterar användardefinierade funktioner som utmatningshanterare och tillåter inställning av vilka operationer som är tillåtna på bufferten (flusha, rensa, ta bort). Buffertar som startas med <code>ob_start()</code> kommer vara aktiva från den rad där funktionen anropas, medan de som startas med <code>output_buffering</code> kommer buffra utmatning från första raden i skriptet.
Utmatningsbuffring kan aktiveras med funktionen <code>[[ob_start()]]</code> eller genom att ställa in <code>output_buffering</code> och <code>output_handler</code> i php.ini. Även om båda kan skapa utmatningsbuffertar är <code>ob_start()</code> mer flexibel eftersom den accepterar användardefinierade funktioner som utmatningshanterare och tillåter inställning av vilka operationer som är tillåtna på bufferten (flusha, rensa, ta bort). Buffertar som startas med <code>[[ob_start()]]</code> kommer vara aktiva från den rad där funktionen anropas, medan de som startas med <code>[[output_buffering]]</code> kommer buffra utmatning från första raden i skriptet.


PHP levereras även 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 <code>output_add_rewrite_var()</code>-funktionen och/eller genom att aktivera <code>session.use_trans_sid</code> i php.ini.
PHP levereras även 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 <code>output_add_rewrite_var()</code>-funktionen och/eller genom att aktivera <code>[[session.use_trans_sid]]</code> i php.ini.


Den inbyggda zlib-modulen har sin egen utmatningsbuffert som kan aktiveras genom att använda inställningen <code>zlib.output_compression</code> i php.ini.
Den inbyggda zlib-modulen har sin egen utmatningsbuffert som kan aktiveras genom att använda inställningen <code>zlib.output_compression</code> i php.ini.
Rad 24: Rad 24:
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 <code>[[ob_flush()]]</code>, <code>[[ob_end_flush()]]</code> eller <code>[[ob_get_flush()]]</code> anropas.
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 <code>[[ob_flush()]]</code>, <code>[[ob_end_flush()]]</code> eller <code>[[ob_get_flush()]]</code> anropas.


''Varning:'' Anrop av <code>[[ob_end_flush()]]</code> eller <code>[[ob_get_flush()]]</code> kommer att stänga av den aktiva bufferten.
'''''Varning:'' Anrop av <code>[[ob_end_flush()]]</code> eller <code>[[ob_get_flush()]]</code> kommer att stänga av den aktiva bufferten.'''


''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 <code>[[ob_gzhandler()]]</code> komprimeras utmatningen och flushar den komprimerade utmatningen.
''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 <code>[[ob_gzhandler()]]</code> komprimeras utmatningen och flushar den komprimerade utmatningen.
Rad 43: Rad 43:
Utmatningsbuffertar kan stängas av genom att anropa <code>[[ob_end_clean()]]</code>, <code>[[ob_end_flush()]]</code>, <code>[[ob_get_flush()]]</code> eller <code>[[ob_get_clean()]]</code>.
Utmatningsbuffertar kan stängas av genom att anropa <code>[[ob_end_clean()]]</code>, <code>[[ob_end_flush()]]</code>, <code>[[ob_get_flush()]]</code> eller <code>[[ob_get_clean()]]</code>.


''Varning:'' Utmatningsbuffertar som startats utan flaggan <code>PHP_OUTPUT_HANDLER_REMOVABLE</code> kan inte stängas av och kan generera en E_NOTICE.
'''''Varning:'' Utmatningsbuffertar som startats utan flaggan <code>PHP_OUTPUT_HANDLER_REMOVABLE</code> 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 <code>exit()</code> anropas kommer att flushas och stängas av under PHP:s avstängningsprocess. Buffertarna kommer att flushas och stängas av i omvänd ordning av deras start. Den sist startade bufferten kommer att vara först, och den först startade bufferten kommer att vara sist att flushas och stängas av.
Varje utmatningsbuffert som inte har stängts av i slutet av skriptet eller när <code>[[exit()]]</code> anropas kommer att flushas och stängas av under PHP:s avstängningsprocess. Buffertarna kommer att flushas och stängas av i omvänd ordning av deras start. Den sist startade bufferten kommer att vara först, och den först startade bufferten 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.
''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.
Rad 52: Rad 52:
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 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 <code>ob_flush()</code>, <code>ob_end_flush()</code> eller <code>ob_get_flush()</code>, flushas buffertens innehåll före felmeddelandet.
Om det icke fångade undantaget slängs i en hanterare som anropas av <code>[[ob_flush()]]</code>, <code>[[ob_end_flush()]]</code> eller <code>[[ob_get_flush()]]</code>, 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.
Om ett icke fångat undantag slängs i en utmatningshanterare under avstängning, avslutas hanteraren och varken buffertens innehåll eller felmeddelandet flushas.
Rad 61: Rad 61:
Om ett icke-fatalt fel uppstår i en utmatningshanterare fortsätter programmet att köra.
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 <code>ob_flush()</code>, <code>ob_end_flush()</code> eller <code>ob_get_flush()</code>, 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.
Om det icke-fatala felet uppstår i en hanterare som anropas av <code>[[ob_flush()]]</code>, <code>[[ob_end_flush(]])</code> eller <code>[[ob_get_flush()]]</code>, 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 <code>PHP_OUTPUT_HANDLER_DISABLED</code>.
''Observera:'' Om en hanterare returnerar false sätts dess statusflagga <code>PHP_OUTPUT_HANDLER_DISABLED</code>.
Rad 67: Rad 67:
Om ett fatalt fel uppstår i en utmatningshanterare avslutas programmet och hanteraren anropas av avstängningsprocessen, varefter felmeddelandet flushas.
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 <code>ob_flush()</code>, <code>ob_end_flush()</code> eller <code>ob_get_flush()</code>, flushas buffertens innehåll före felmeddelandet.
Om det fatala felet uppstår i en hanterare som anropas av <code>[[ob_flush()]]</code>, <code>[[ob_end_flush()]]</code> eller <code>[[ob_get_flush()]]</code>, flushas buffertens innehåll före felmeddelandet.


Om ett fatalt fel uppstår i en utmatningshanterare under avstängning avslutas programmet utan att flusha bufferten eller felmeddelandet.
Om ett fatalt fel uppstår i en utmatningshanterare under avstängning avslutas programmet utan att flusha bufferten eller felmeddelandet.


=== Utmatning i Utmatningshanterare ===
=== 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 <code>ob_get_flush()</code>.
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 <code>[[ob_get_flush()]]</code>.


Under flush-operationer (anrop av <code>ob_flush()</code>, <code>ob_end_flush()</code>, <code>ob_get_flush()</code> 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 slängning av ett undantag eller anrop av <code>exit()</code> i samma beteende.
Under flush-operationer (anrop av <code>[[ob_flush()]]</code>, <code>[[ob_end_flush()]]</code>, <code>[[ob_get_flush()]]</code> 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 slängning av ett undantag eller anrop av <code>[[exit()]]</code> i samma beteende.


''Observera:'' Om en hanterare returnerar false sätts dess statusflagga <code>PHP_OUTPUT_HANDLER_DISABLED</code>.
''Observera:'' Om en hanterare returnerar false sätts dess statusflagga <code>PHP_OUTPUT_HANDLER_DISABLED</code>.


=== Statusflaggor för Utmatningshanterare ===
=== 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 <code>ob_get_status()</code>. Om hanteraren exekveras framgångsrikt och inte returnerar false, sätts <code>PHP_OUTPUT_HANDLER_STARTED</code> och <code>PHP_OUTPUT_HANDLER_PROCESSED</code>. Om hanteraren returnerar false eller slänger ett undantag under exekvering, sätts <code>PHP_OUTPUT_HANDLER_STARTED</code> och <code>PHP_OUTPUT_HANDLER_DISABLED</code>.
Hanterarens statusflaggor i buffertens flaggmask sätts varje gång utmatningshanteraren anropas och är en del av flaggorna som returneras av <code>[[ob_get_status()]]</code>. Om hanteraren exekveras framgångsrikt och inte returnerar false, sätts <code>PHP_OUTPUT_HANDLER_STARTED</code> och <code>PHP_OUTPUT_HANDLER_PROCESSED</code>. Om hanteraren returnerar false eller slänger ett undantag under exekvering, sätts <code>PHP_OUTPUT_HANDLER_STARTED</code> och <code>PHP_OUTPUT_HANDLER_DISABLED</code>.


''Observera:'' Om <code>PHP_OUTPUT_HANDLER_DISABLED</code> är satt för en hanterare kommer hanteraren inte att anropas av <code>ob_end_clean()</code>, <code>ob_end_flush()</code>, <code>ob_get_clean()</code>, <code>ob_get_flush()</code> eller under PHP:s avstängningsprocess. Denna flagga har ingen effekt när <code>ob_clean()</code> eller <code>ob_flush()</code> anropas.
''Observera:'' Om <code>PHP_OUTPUT_HANDLER_DISABLED</code> är satt för en hanterare kommer hanteraren inte att anropas av <code>[[ob_end_clean()]]</code>, <code>[[ob_end_flush()]]</code>, <code>[[ob_get_clean()]]</code>, <code>[[ob_get_flush()]]</code> eller under PHP:s avstängningsprocess. Denna flagga har ingen effekt när <code>[[ob_clean()]]</code> eller <code>[[ob_flush()]]</code> anropas.
 
= Sidslut =
 
Orginalhemsidan på Engelska :https://www.php.net/manual/en/outcontrol.user-level-output-buffers.php
 
[[PHP]]
[[Funktioner]]
[[Funktionsreferens]]
 
<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.
 
 
[[Kategori:Php]]
[[Kategori:Utmatningskontroll]]

Nuvarande version från 12 oktober 2024 kl. 05.32

Användar-Nivå Buffertar för Utmatning

Innehållsförteckning

Utmatningsbuffertar på användarnivå kan startas, manipuleras och avslutas från PHP-kod. Varje buffert inkluderar en utmatningsbuffert och en associerad utmatningshanterarfunktion.

Aktivera Utmatningsbuffring

Utmatningsbuffring kan aktiveras med funktionen ob_start() eller genom att ställa in output_buffering och output_handler i php.ini. Även om båda kan skapa utmatningsbuffertar är ob_start() mer flexibel eftersom den accepterar användardefinierade funktioner som utmatningshanterare och tillåter inställning av vilka operationer som är tillåtna på bufferten (flusha, rensa, ta bort). Buffertar som startas med ob_start() kommer vara aktiva från den rad där funktionen anropas, medan de som startas med output_buffering kommer buffra utmatning från första raden i skriptet.

PHP levereras även 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 output_add_rewrite_var()-funktionen och/eller genom att aktivera session.use_trans_sid i php.ini.

Den inbyggda zlib-modulen har sin egen utmatningsbuffert som kan aktiveras genom att använda inställningen zlib.output_compression i php.ini.

Observera: Även om "URL-Rewriter" är speciell i den meningen att den endast tillåter upp till två instanser samtidigt, använder alla utmatningsbuffertar på användarnivå samma underliggande buffertar som används av ob_start() med sin funktionalitet implementerad av en anpassad utmatningshanterarfunktion. Således kan all dess funktionalitet emuleras av användarkod.

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 ob_flush(), ob_end_flush() eller ob_get_flush() anropas.

Varning: Anrop av ob_end_flush() eller ob_get_flush() kommer att stänga av den aktiva bufferten.

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 ob_gzhandler() komprimeras utmatningen och flushar den komprimerade utmatningen.

Innehållet i den aktiva bufferten kan hämtas genom att anropa ob_get_contents(), ob_get_clean() eller ob_get_flush().

Om endast längden på buffertens innehåll behövs, kommer ob_get_length() eller ob_get_status() att returnera längden på innehållet i bytes.

Varning:

Anrop av ob_get_clean() eller ob_get_flush() 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 ob_clean(), ob_end_clean() eller ob_get_clean().

Varning: Anrop av ob_end_clean() eller ob_get_clean() kommer att stänga av den aktiva bufferten.

Stänga Av Buffertar

Utmatningsbuffertar kan stängas av genom att anropa ob_end_clean(), ob_end_flush(), ob_get_flush() eller ob_get_clean().

Varning: Utmatningsbuffertar som startats utan flaggan PHP_OUTPUT_HANDLER_REMOVABLE 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 exit() anropas kommer att flushas och stängas av under PHP:s avstängningsprocess. Buffertarna kommer att flushas och stängas av i omvänd ordning av deras start. Den sist startade bufferten kommer att vara först, och den först startade bufferten 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 ob_flush(), ob_end_flush() eller ob_get_flush(), 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 PHP_OUTPUT_HANDLER_DISABLED.

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 ob_flush(), ob_end_flush() eller ob_get_flush(), 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 PHP_OUTPUT_HANDLER_DISABLED.

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 ob_flush(), ob_end_flush() eller ob_get_flush(), flushas buffertens innehåll före felmeddelandet.

Om ett fatalt fel uppstår i en utmatningshanterare under avstängning avslutas programmet utan att flusha 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 ob_get_flush().

Under flush-operationer (anrop av ob_flush(), ob_end_flush(), ob_get_flush() 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 slängning av ett undantag eller anrop av exit() i samma beteende.

Observera: Om en hanterare returnerar false sätts dess statusflagga PHP_OUTPUT_HANDLER_DISABLED.

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 ob_get_status(). Om hanteraren exekveras framgångsrikt och inte returnerar false, sätts PHP_OUTPUT_HANDLER_STARTED och PHP_OUTPUT_HANDLER_PROCESSED. Om hanteraren returnerar false eller slänger ett undantag under exekvering, sätts PHP_OUTPUT_HANDLER_STARTED och PHP_OUTPUT_HANDLER_DISABLED.

Observera: Om PHP_OUTPUT_HANDLER_DISABLED är satt för en hanterare kommer hanteraren inte att anropas av ob_end_clean(), ob_end_flush(), ob_get_clean(), ob_get_flush() eller under PHP:s avstängningsprocess. Denna flagga har ingen effekt när ob_clean() eller ob_flush() anropas.

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/outcontrol.user-level-output-buffers.php

PHP Funktioner Funktionsreferens


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/

Tack till Datorhjälp som har sponsrat Linux.se med webserver.