Was ist Ausgangspufferung?

Lesezeit: 7 Minuten

Was ist Ausgangspufferung
Abhimanyu

Was ist Ausgabepufferung und warum verwendet man sie in PHP?

Was ist Ausgangspufferung
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 sich freuen 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


1646978048 635 Was ist Ausgangspufferung
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

Was ist Ausgangspufferung
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. Die 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

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

Wie der Name schon sagt, wird hier ein Speicherpuffer verwendet, um zu verwalten, wie die Ausgabe des Skripts angezeigt wird.

Hier ist eine sehr gute Anleitung für das Thema

1644238148 983 Was ist der Unterschied zwischen Pull und Clone in Git
Eje

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. Damit 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

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 Skript zu generieren, 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.

Prost.

Du kannst einen schnellen Fluss machen oder du kannst sicher Tama machen 🙂

990030cookie-checkWas ist Ausgangspufferung?

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

Privacy policy