Wat is outputbuffering?

Wat is output buffering en waarom gebruikt men het in PHP?


Antwoord 1, autoriteit 100%

Uitvoerbuffering voor webontwikkelaars, een beginnershandleiding:

Zonder outputbuffering (standaard), wordt je HTML in stukjes naar de browser gestuurd terwijl PHP via je script wordt verwerkt. Met output buffering wordt je HTML opgeslagen in een variabele en als één stuk naar de browser gestuurd aan het einde van je script.

Voordelen van outputbuffering voor webontwikkelaars

  • Als u alleen uitvoerbuffering inschakelt, neemt de hoeveelheid tijd af die nodig is om onze HTML te downloaden en weer te geven, omdat deze niet in delen naar de browser wordt verzonden terwijl PHP de HTML verwerkt.
  • Alle mooie dingen die we kunnen doen met PHP-strings, kunnen we nu doen met onze hele HTML-pagina als één variabele.
  • Als u ooit het bericht “Waarschuwing: kan header-informatie niet wijzigen – headers al verzonden door (output)” bent tegengekomen tijdens het instellen van cookies, zult u blij zijn te weten dat outputbuffering uw antwoord is.

Antwoord 2, autoriteit 25%

Uitvoerbufferingwordt door PHP gebruikt om de prestaties te verbeteren en een paar trucjes.

  • Je kunt PHP alle uitvoer in een buffer laten opslaan en deze in één keer uitvoeren om de netwerkprestaties te verbeteren.

  • In bepaalde situaties heeft u toegang tot de bufferinhoud zonder deze terug te sturen naar de browser.

Beschouw dit voorbeeld:

<?php
    ob_start( );
    phpinfo( );
    $output = ob_get_clean( );
?>

Het bovenstaande voorbeeld legt de uitvoer vast in een variabele in plaats van deze naar de browser te sturen. output_buffering is standaard uitgeschakeld.

  • U kunt uitvoerbuffering gebruiken in situaties waarin u kopteksten wilt wijzigen na het verzenden van inhoud.

Beschouw dit voorbeeld:

<?php
    ob_start( );
    echo "Hello World";
    if ( $some_error )
    {
        header( "Location: error.php" );
        exit( 0 );
    }
?>

Antwoord 3, autoriteit 10%

Ik weet dat dit een oude vraag is, maar ik wilde mijn antwoord schrijven voor visuele studenten. Ik kon geen diagrammen vinden die output buffering uitleggen op het wereldwijde web, dus heb ik zelf een diagram gemaakt in Windows mspaint.exe.

Als uitvoerbuffering is uitgeschakeld, stuurt echogegevens onmiddellijk naar de browser.

voer hier de afbeeldingsbeschrijving in

Als uitvoerbuffering is ingeschakeld, zal een echogegevens naar de uitvoerbuffer verzenden voordat deze naar de browser worden verzonden.

voer hier de afbeeldingsbeschrijving in

phpinfo

Raadpleeg phpinfo in het kerngedeelte om te zien of uitvoerbuffering is in- of uitgeschakeld. De instructie output_bufferinggeeft aan of Output buffering aan/uit is.

voer hier de afbeeldingsbeschrijving in
In dit geval is de waarde output_buffering4096, wat betekent dat de buffergrootte 4 KB is. Het betekent ook dat uitvoerbuffering is ingeschakeld op de webserver.

php.ini

Het is mogelijk om de buffergrootte aan/uit te zetten en te wijzigen door de waarde van de output_buffering-instructie te wijzigen. Zoek het gewoon op in php.ini, verander het naar de instelling van je keuze en herstart de webserver. Hieronder vind je een voorbeeld van mijn php.ini.

; Output buffering is a mechanism for controlling how much output data
; (excluding headers and cookies) PHP should keep internally before pushing that
; data to the client. If your application's output exceeds this setting, PHP
; will send that data in chunks of roughly the size you specify.
; Turning on this setting and managing its maximum buffer size can yield some
; interesting side-effects depending on your application and web server.
; You may be able to send headers and cookies after you've already sent output
; through print or echo. You also may see performance benefits if your server is
; emitting less packets due to buffered output versus PHP streaming the output
; as it gets it. On production servers, 4096 bytes is a good setting for performance
; reasons.
; Note: Output buffering can also be controlled via Output Buffering Control
;   functions.
; Possible Values:
;   On = Enabled and buffer is unlimited. (Use with caution)
;   Off = Disabled
;   Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096

De richtlijn output_bufferingis niet de enige configureerbare richtlijn met betrekking tot uitvoerbuffering. Andere configureerbare richtlijnen voor uitvoerbuffering vindt u hier: http://php.net/manual/en /outcontrol.configuration.php

Voorbeeld: ob_get_clean()

Hieronder kunt u zien hoe u een echovastlegt en manipuleert voordat u deze naar de browser verzendt.

// Turn on output buffering  
ob_start();  
echo 'Hello World';  // save to output buffer
$output = ob_get_clean();  // Get content from the output buffer, and discard the output buffer ...
$output = strtoupper($output); // manipulate the output  
echo $output;  // send to output stream / Browser
// OUTPUT:  
HELLO WORLD

Voorbeelden: Hackingwithphp.com

Meer info over Uitvoerbuffer met voorbeelden vindt u hier:

http://www.hackingwithphp.com/13/0/0/ output-buffering


Antwoord 4, autoriteit 3%

Met de Output Control-functies kunt u:
om te bepalen wanneer uitvoer wordt verzonden van
het script. Dit kan handig zijn bij
verschillende situaties,
vooral als je headers moet verzenden
naar de browser nadat uw script heeft
begonnen met het uitvoeren van gegevens. Het resultaat
Besturingsfuncties hebben geen invloed op:
headers verzonden met header() of
setcookie(), alleen functies zoals
echo() en data tussen blokken van PHP
code.

http://php.net/manual/en/book.outcontrol.php

Meer bronnen:

Uitvoerbuffering met PHP


Antwoord 5

Zoals de naam hier doet vermoeden, wordt een geheugenbuffer gebruikt om te beheren hoe de uitvoer van het script wordt weergegeven.

Hier is een zeer goede tutorialvoor het onderwerp


Antwoord 6

ob_start();  // turns on output buffering
$foo->bar();  // all output goes only to buffer
ob_clean();  // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents();  // buffer content is now an empty string
ob_end_clean();  // turn off output buffering

Buffers kunnen worden genest, dus terwijl een buffer actief is, activeert een andere ob_start()een nieuwe buffer. Dus ob_end_flush()en ob_flush()sturen de buffer niet echt naar de uitvoer, maar naar de bovenliggende buffer. En alleen als er geen ouderbuffer is, wordt de inhoud naar de browser of terminal gestuurd.

Mooi uitgelegd hier: https://phpfashion.com/everything-about -output-buffering-in-php


Antwoord 7

UPDATE 2019. Als je een dedicated server en SSD of betere NVM hebt, 3,5 GHZ. Je moet geen buffering gebruiken om een ​​sneller geladen website te maken in 100ms-150ms.

Omdat het netwerk trager is dan het verwerken van script in de 2019 met prestatieservers (servers, geheugen, schijf) en met APC PHP aanzetten 🙂 Om het gegenereerde script soms maar 70 ms nodig te hebben, is een andere keer dat alleen het netwerk tijd kost, van 10 ms tot 150ms van de gelokaliseerde gebruikersserver.

dus als je 150 ms snel wilt zijn, wordt bufferen langzaam, omdat extra verzamelbuffergegevens extra kosten met zich meebrengen. 10 jaar geleden, toen server 1s-script maakte, was het nuttig.

Pas op dat output_buffering een limiet heeft als u jpg wilt gebruiken om te laden, het kan automatisch worden doorgespoeld en het verzenden crashen.

Proost.

Je kunt een snelle rivier maken
of
Je kunt veilig tama maken 🙂


Antwoord 8

Dit is een samenvatting van outputbuffering in php. (XAMPP php.ini )

Uitvoerbuffering is een mechanisme om te bepalen hoeveel uitvoergegevens
(exclusief headers en cookies) PHP moet intern worden bewaard voordat het wordt gepusht
gegevens aan de opdrachtgever. Als de uitvoer van uw toepassing deze instelling overschrijdt, verzendt PHP die gegevens in brokken van ongeveer de grootte die u opgeeft. Het inschakelen van deze instelling en het beheren van de maximale buffergrootte kan enkele interessante neveneffecten opleveren, afhankelijk van uw toepassing en webserver. U kunt mogelijk headers en cookies verzenden nadat u de uitvoer al via print of echo hebt verzonden. Mogelijk ziet u ook prestatievoordelen als uw server minder pakketten uitzendt vanwege gebufferde uitvoer versus PHP-streaming van de uitvoer
zoals het het krijgt. Op productieservers is 4096 bytes een goede instelling voor prestaties
redenen.

Opmerking: Uitvoerbuffering kan ook worden geregeld via Uitvoerbufferregeling
functies.

Mogelijke waarden:

Aan = Ingeschakeld en buffer is onbeperkt. (Voorzichtig gebruiken)

Uit = Uitgeschakeld

Integer = Schakelt de buffer in en stelt de maximale grootte in bytes in.

Opmerking: deze instructie is hard gecodeerd naar Uit voor de CLI SAPI

Standaardwaarde: Uit

Ontwikkelingswaarde: 4096

Productiewaarde: 4096

http://php.net/output-buffering
output_buffering=4096

Other episodes