wake-up-neo.com

Was ist Ausgabepufferung?

Was ist Ausgabepufferung und warum wird sie in PHP verwendet?

182
Abhimanyu

Ausgabepufferung für Webentwickler, ein Anfängerhandbuch :

Ohne Ausgabepufferung (Standardeinstellung) wird Ihr HTML in Teilen an den Browser gesendet, während PHP Ihr Skript verarbeitet. Bei der Ausgabepufferung wird Ihr HTML-Code in einer Variablen gespeichert und am Ende Ihres Skripts als ein Teil an den Browser gesendet.

Vorteile der Ausgabepufferung für Webentwickler

  • Wenn Sie nur die Ausgabepufferung aktivieren, verringert sich die Zeit, die zum Herunterladen und Rendern von HTML erforderlich ist, da HTML nicht in Teilen an den Browser gesendet wird, da PHP den HTML-Code verarbeitet.
  • Alles, was wir mit PHP - Strings machen können, können wir jetzt mit unserer gesamten HTML-Seite als eine Variable tun.
  • Wenn Sie beim Setzen von Cookies auf die Meldung "Warnung: Kopfzeileninformationen können nicht geändert werden können (Ausgabe bereits gesendet (Ausgabe)") gestoßen sind, werden Sie froh sein, dass die Ausgabepufferung Ihre Antwort ist.
248
ax.

Ausgabepufferung wird von PHP verwendet, um die Leistung zu verbessern und einige Tricks auszuführen.

  • Sie können PHP die gesamte Ausgabe in einem Puffer speichern und auf einmal ausgeben, um die Netzwerkleistung zu verbessern. 

  • Sie können auf den Pufferinhalt zugreifen, ohne ihn in bestimmten Situationen an den Browser zurückzusenden.

Betrachten Sie dieses Beispiel:

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

Das obige Beispiel erfasst die Ausgabe in einer Variablen, anstatt sie an den Browser zu senden. output_buffering ist standardmäßig deaktiviert.

  • Sie können die Ausgabepufferung verwenden, wenn Sie nach dem Senden von Inhalten Kopfzeilen ändern möchten.

Betrachten Sie dieses Beispiel:

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

Die Funktionen zur Ausgabesteuerung ermöglichen Ihnen um zu steuern, wann die Ausgabe von .__ gesendet wird. das Skript Dies kann in .__ nützlich sein. verschiedene Situationen, vor allem, wenn Sie Header senden müssen an den Browser, nachdem Ihr Skript begann mit der Ausgabe von Daten. Die Ausgabe Steuerfunktionen beeinflussen nicht Header, die mit header () oder .__ gesendet wurden. setcookie (), nur Funktionen wie echo () und Daten zwischen PHP-Blöcken Code.

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

Mehr Ressourcen:

Ausgabepufferung mit PHP 

9
Sarfraz

Ich weiß, dass dies eine alte Frage ist, aber ich wollte meine Antwort für visuelle Lernende schreiben. Ich konnte keine Diagramme finden, die die Ausgabepufferung im weltweiten Web erklären, also habe ich selbst etwas in mspaint gemacht. 

Wenn die Ausgabepufferung deaktiviert ist, sendet echo die Daten sofort an den Browser.

 enter image description here

Wenn die Ausgabepufferung aktiviert ist, sendet eine echo Daten in den Ausgabepuffer, bevor sie an den Browser gesendet werden. 

 enter image description here

phpinfo

Um zu sehen, ob die Ausgabepufferung ein- oder ausgeschaltet ist, lesen Sie bitte phpinfo im Kernbereich. Die output_buffering-Direktive zeigt an, ob die Ausgabepufferung ein- oder ausgeschaltet ist.

 enter image description here .__ In diesem Fall ist der output_buffering-Wert 4096, was bedeutet, dass die Puffergröße 4 KB beträgt. Dies bedeutet auch, dass die Ausgabepufferung auf dem Webserver aktiviert ist. 

php.ini

Sie können die Puffergröße ein-/ausschalten und ändern, indem Sie den Wert der output_buffering-Direktive ändern. Suchen Sie es einfach in php.ini, ändern Sie es in die Einstellung Ihrer Wahl und starten Sie den Webserver neu. Ein Beispiel für meinen php.ini finden Sie unten. 

; 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

Die Direktive output_buffering ist nicht die einzige konfigurierbare Direktive bezüglich der Ausgabepufferung. Weitere konfigurierbare Ausgabepufferanweisungen finden Sie hier: http://php.net/manual/de/outcontrol.configuration.php

Beispiel: ob_get_clean ()

Nachfolgend können Sie sehen, wie Sie eine echo erfassen und bearbeiten, bevor Sie sie an den Browser senden. 

// Turn on output buffering  
ob_start();  

echo 'Hello World';  // save to output buffer

// Get content which is in the output buffer ...  
// ... and delete output buffer  
$output = ob_get_clean();  
$output = strtoupper($output); // manipulate the output  

echo $output;  // send to output stream / Browser

// OUTPUT:  
HELLO WORLD

Beispiele: Hackingwithphp.com

Weitere Informationen zum Ausgabepuffer mit Beispielen finden Sie hier: 

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

5
Julian

Als Name empfehlen wir hier den Speicherpuffer, mit dem die Ausgabe des Skripts gesteuert wird.

Hier ist ein sehr gutes Tutorial zum Thema

4
nik
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

Puffer können verschachtelt sein, also aktiviert ein anderer ob_start () einen neuen Puffer, während ein Puffer aktiv ist. Ob_end_flush () und ob_flush () senden den Puffer also nicht wirklich an den Ausgang, sondern an den übergeordneten Puffer. Nur wenn kein übergeordneter Puffer vorhanden ist, wird der Inhalt an den Browser oder das Terminal gesendet.

Schön erklärt hier: https://phpfashion.com/everything-about-output-buffering-in-php

1
sudip

UPDATE 2019. Wenn Sie einen dedizierten Server und eine SSD oder eine bessere NVM haben, dann 3,5 GHz. Sie sollten keine Pufferung verwenden, um eine schneller geladene Website in 100 ms-150 ms zu erstellen.

Becouse-Netzwerk ist langsamer als das Skript im Jahr 2019 mit Performance-Servern (Server, Arbeitsspeicher, Festplatte) und mit APC zu aktivieren PHP :) Das erzeugte Skript benötigt manchmal nur 70 ms bis 150ms vom lokalisierten Benutzer-Server. 

wenn Sie also schnell 150ms machen wollen, machen die Pufferung langsam, da zusätzliche Pufferdaten benötigt werden, was zusätzliche Kosten verursacht. Vor 10 Jahren, als der Server 1s-Skript erstellte, war es nützlich.

Bitte beachten Sie, dass output_buffering ein Limit hat, wenn Sie mit jpg laden möchten, dass es automatisiert wird und das Senden abstürzt.

Prost.

Sie können schnellen Fluss machen Oder Sie können sicher Tama machen :) 

0