Was ist Ausgabepufferung und warum würden Sie sie in PHP verwenden?
Was ist Ausgabepufferung in PHP?
Abhimanyu
Axt.
Ausgabepufferung für Webentwickler, ein Leitfaden für Anfänger:
Ohne Ausgabepufferung (Standardeinstellung) wird Ihr HTML in Teilen an den Browser gesendet, während PHP Ihr Skript verarbeitet. Bei der Ausgabepufferung wird Ihr HTML in einer Variablen gespeichert und am Ende Ihres Skripts als Ganzes an den Browser gesendet.
Vorteile der Ausgabepufferung für Webentwickler
- Allein das Aktivieren der Ausgabepufferung verringert die Zeit, die zum Herunterladen und Rendern unseres HTML-Codes benötigt wird, da dieser nicht in Stücken an den Browser gesendet wird, während PHP den HTML-Code verarbeitet.
- All die ausgefallenen Dinge, die wir mit PHP-Strings machen können, können wir jetzt mit unserer gesamten HTML-Seite als eine Variable machen.
- Wenn Sie jemals beim Setzen von Cookies auf die Meldung „Warnung: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von (Ausgabe)“ gestoßen sind, werden Sie froh sein zu wissen, dass die Ausgabepufferung Ihre Antwort ist.
-
+1. Hier noch ein hilfreicher Link: php.net/manual/en/function.ob-start.php – auch hilfreich, wenn es um eine Funktion geht, die einen Wert wiedergibt, den Sie lieber in einer Variablen speichern würden.
– Kamera
14. Mai 2010 um 6:21 Uhr
-
Wird wirklich alles bis zum Ende gepuffert, oder kommt die Seite nur in Brocken, wenn ich eine wahnsinnig lange Seite habe?
– Zedoo
14. Mai 2010 um 7:02 Uhr
-
@zedoo wenn Sie die Ausgabepufferung mit starten
ob_start()
, wirklich alles wird gepuffert. Es gibt einen optionalen zweiten Parameter fürob_start()
,int $chunk_size
die, wenn sie gesetzt ist, dazu führt, dass der Puffer nach jedem Ausgabeaufruf geleert wird, der dazu führt, dass die Länge des Puffers dieser Größe entspricht oder diese überschreitet.– Axt.
14. Mai 2010 um 7:24 Uhr
-
Wenn Sie “Warning: Cannot modify header information” erhalten, bedeutet dies, dass Sie Ihren Code zuerst prüfen müssen, da die Aktivierung der Ausgabepufferung eine Behebung des Symptoms und nicht die Ursache ist. Etwas schreibt, bevor es an der Reihe ist. Also bin ich anderer Meinung, aber nicht genug, um die Antwort herunterzuschrauben.
– Glenn Plas
2. Juli 2013 um 18:06 Uhr
-
Ich sehe nur Vorteile in der Verwendung von Pufferung, also warum ist es in PHP nicht standardmäßig aktiviert?
– Thomas Banderas
31. Januar 2017 um 2:15 Uhr
Salmann A
Ausgangspufferung wird von PHP verwendet, um die Leistung zu verbessern und ein paar Tricks auszuführen.
-
Sie können PHP alle Ausgaben in einem Puffer speichern und alles auf einmal ausgeben lassen, 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 ausgeschaltet.
- Sie können die Ausgabepufferung in Situationen verwenden, in denen Sie Header nach dem Senden von Inhalten ändern möchten.
Betrachten Sie dieses Beispiel:
<?php
ob_start( );
echo "Hello World";
if ( $some_error )
{
header( "Location: error.php" );
exit( 0 );
}
?>
-
Hier die gleiche Frage wie bei Ax: Wird das Starten der Ausgabepufferung, ohne sie später wieder auszuschalten, nicht dazu führen, dass Ihr Skript auf alle möglichen Probleme stößt?
– Edward Stumperd
24. September 2012 um 21:28 Uhr
-
Der Puffer wird geleert, wenn Sie eine der Flush-Methoden aufrufen (z
ob_flush()
oderob_end_flush()
). Der Inhalt des Puffers wird auch geleert, wenn Ihr Skript abrupt oder auf andere Weise endet, sodass es kein Problem geben sollte.– Salmann A
25. September 2012 um 6:09 Uhr
julianisch
Ich weiß, dass dies eine alte Frage ist, aber ich wollte meine Antwort für visuelle Lerner schreiben. Ich konnte im World Wide Web keine Diagramme finden, die die Ausgabepufferung erklären, also habe ich selbst ein Diagramm in Windows erstellt mspaint.exe
.
Wenn die Ausgangspufferung ausgeschaltet ist, dann echo
sendet Daten sofort an den Browser.
Wenn die Ausgangspufferung eingeschaltet ist, dann ein echo
sendet Daten an den Ausgabepuffer, bevor sie an den Browser gesendet werden.
phpinfo
Um zu sehen, ob die Ausgabepufferung ein- oder ausgeschaltet ist, lesen Sie bitte phpinfo im Kernabschnitt. Der output_buffering
Die Direktive sagt Ihnen, ob die Ausgabepufferung ein- oder ausgeschaltet ist.
In diesem Fall die output_buffering
Der Wert ist 4096, was bedeutet, dass die Puffergröße 4 KB beträgt. Dies bedeutet auch, dass die Ausgabepufferung auf dem Webserver aktiviert ist.
php.ini
Es ist möglich, die Puffergröße ein-/auszuschalten und zu ändern, indem Sie den Wert von ändern output_buffering
Richtlinie. Finde es einfach drin php.ini
, ändern Sie sie in die Einstellung Ihrer Wahl und starten Sie den Webserver neu. Eine Probe finden Sie bei mir php.ini
unter.
; 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 Anweisung bezüglich der Ausgabepufferung. Weitere konfigurierbare Ausgangspufferanweisungen finden Sie hier: http://php.net/manual/en/outcontrol.configuration.php
Beispiel: ob_get_clean()
Unten sehen Sie, wie Sie eine erfassen echo
und manipulieren Sie es, bevor Sie es an den Browser senden.
// 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
Beispiele: Hackingwithphp.com
Weitere Informationen zum Ausgabepuffer mit Beispielen finden Sie hier:
-
Frage, muss ich display_errors auf On setzen, damit dieser Puffer erfasst wird?
– Matthias
12. Mai 2022 um 13:30 Uhr
-
display_errors
Undoutput_buffering
sind zwei verschiedene dinge. Korrigieren Sie mich, wenn ich falsch liege, Einstellungdisplay_errors
Zu"1"
ist nicht nötig.– Julian
17. Mai 2022 um 9:25 Uhr
Mit den Funktionen zur Ausgabesteuerung können Sie steuern, wann die Ausgabe vom Skript gesendet wird. Dies kann in verschiedenen Situationen nützlich sein, insbesondere wenn Sie Header an den Browser senden müssen, nachdem Ihr Skript mit der Ausgabe von Daten begonnen hat. Die Funktionen zur Ausgabesteuerung wirken sich nicht auf Header aus, die mit header() oder setcookie() gesendet werden, sondern nur auf Funktionen wie echo() und Daten zwischen PHP-Codeblöcken.
http://php.net/manual/en/book.outcontrol.php
Mehr Ressourcen:
sudip
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 werden, also während ein Puffer aktiv ist, ein anderer ob_start()
aktiviert einen neuen Puffer. So ob_end_flush()
Und ob_flush()
senden den Puffer nicht wirklich an den Ausgang, sondern an den übergeordneten Puffer. Und nur wenn kein übergeordneter Puffer vorhanden ist, werden Inhalte an den Browser oder das Terminal gesendet.
Hier schön erklärt: https://phpfashion.com/everything-about-output-buffering-in-php
infomasud
Dies ist eine Zusammenfassung der Ausgabepufferung in PHP. (XAMPP-php.ini )
Ausgabepufferung ist ein Mechanismus zur Steuerung, wie viele Ausgabedaten (ohne Header und Cookies) PHP intern speichern soll, bevor diese Daten an den Client übertragen werden. Wenn die Ausgabe Ihrer Anwendung diese Einstellung überschreitet, sendet PHP diese Daten in Blöcken von ungefähr der von Ihnen angegebenen Größe. Das Aktivieren dieser Einstellung und das Verwalten der maximalen Puffergröße kann je nach Anwendung und Webserver zu einigen interessanten Nebeneffekten führen. Möglicherweise können Sie Header und Cookies senden, nachdem Sie die Ausgabe bereits über print oder echo gesendet haben. Möglicherweise sehen Sie auch Leistungsvorteile, wenn Ihr Server aufgrund der gepufferten Ausgabe weniger Pakete ausgibt als PHP, das die Ausgabe so streamt, wie sie sie erhält. Auf Produktionsservern ist 4096 Byte aus Leistungsgründen eine gute Einstellung.
Hinweis: Die Ausgabepufferung kann auch über die Output Buffering Control-Funktionen gesteuert werden.
Mögliche Werte:
Ein = Aktiviert und Puffer ist unbegrenzt. (Mit Vorsicht verwenden)
Aus = Deaktiviert
Integer = Aktiviert den Puffer und legt seine maximale Größe in Bytes fest.
Hinweis: Diese Anweisung ist für die CLI SAPI fest auf „Off“ codiert
Standardwert: Aus
Entwicklungswert: 4096
Produktionswert: 4096
http://php.net/output-buffering
output_buffering=4096
UPDATE 2019. Wenn Sie einen dedizierten Server und SSD oder besser NVM haben, 3,5 GHZ. Sie sollten keine Pufferung verwenden, um eine schneller geladene Website in 100 bis 150 ms zu machen.
Weil das Netzwerk im Jahr 2019 mit Performance-Servern (Servern, Speicher, Festplatte) und mit eingeschaltetem APC PHP langsamer als das Verarbeiten von Skripten ist 🙂 Um ein generiertes Skript zu erstellen, benötigen Sie manchmal nur 70 ms, ein anderes Mal ist nur das Netzwerk Zeit, von 10 ms bis zu 150 ms entfernt Benutzer-Server.
Wenn Sie also 150 ms schnell sein möchten, machen Sie die Pufferung langsam, da Sie zusätzliche Pufferdaten für die Sammlung benötigen, 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 jpg zum Laden verwenden möchten, es kann automatisieren und das Senden abstürzen lassen.
Beifall.
Du kannst einen schnellen Fluss machen oder du kannst sicher Tama machen 🙂