Vad buffras i utmatningen?: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
 
(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 inställningarna för [[display_errors]] och [[error_reporting]])
* Tillåtna operationer 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 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.

Nuvarande version från 12 oktober 2024 kl. 05.40

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:

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().

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/outcontrol.what-output-is-buffered.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.