Was ist Ausgabepufferung in PHP?

Lesezeit: 8 Minuten

Benutzeravatar von Abhimanyu
Abhimanyu

Was ist Ausgabepufferung und warum würden Sie sie in PHP verwenden?

Benutzeravatar von ax
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ür ob_start(), int $chunk_sizedie, 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


Benutzeravatar von Salman A
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() oder ob_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

Benutzeravatar von Julian
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.

Geben Sie hier die Bildbeschreibung ein

Wenn die Ausgangspufferung eingeschaltet ist, dann ein echo sendet Daten an den Ausgabepuffer, bevor sie an den Browser gesendet werden.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

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:

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

  • Frage, muss ich display_errors auf On setzen, damit dieser Puffer erfasst wird?

    – Matthias

    12. Mai 2022 um 13:30 Uhr

  • display_errors Und output_buffering sind zwei verschiedene dinge. Korrigieren Sie mich, wenn ich falsch liege, Einstellung display_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:

Ausgabepufferung mit PHP

Benutzeravatar von sudip
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

Benutzeravatar von infomasud
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 🙂

1449490cookie-checkWas ist Ausgabepufferung in PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy