theiNaD

Output Buffering

Was ist Output Buffering und wie funktioniert es?

Output Buffering bedeutet nicht mehr, als das alles, was ausgegeben wird, in einen Puffer geladen wird und erst wenn das Script fertig ist bzw. durchgelaufen ist die Ausgabe erfolgt.
Die beiden hierfür benötigten Funktionen heißen ob_start() und ob_flush(), wobei letztere nicht gebraucht wird, da PHP, seit PHP 5 glaube ich, am Ende des Scripts den Puffer ausgiebt, falls ob_start() gesetzt wurde.

Die Verwendung der Funktionen (wir arbeiten mit beiden, da es so sicher ist, dass der Puffer ausgegeben wird) ist so simpel wie ihr Zweck. ob_start() kommt an den Anfang einer PHP Datei und ob_flush() oder auch ob_end_flush(), welche im weiteren Verlauf noch erläutert wird, an das Ende der Datei.
Durch ob_start() wird all das, was nach dieser Funktion im Script steht, in einen sogenannten Puffer geladen. Dieser wird durch ob_flush() ausgegeben und wenn man stattdessen ob_end_flush() benutzt, dann wird dieser Puffer auch noch gelöscht und kann nicht wieder ausgegeben werden.
Das heißt nicht, dass der Puffer für immer gespeichert wird, wenn man ob_flush() benutzt, sondern nur während der Scriptlaufzeit. Sobald die Seite neu geladen wird, ist der Puffer weg und ein neuer wird gefüllt.

Was bringt das ganze?

Wenn man Veränderungen am Header vornimmt kommt es normalerweise zu Fehlern.
Ich versuche es mal Bildlich darzustellen:
Der Browser empfängt einzelne Teile der Seite, mittendrin kommt ein „Kopfteil“, was normalerweise am Anfang einer Seite steht, und da der Browser die Seite nun nicht mehr umändern kann kommt diese Fehlermeldung von PHP, da der Browser dem Server sendet, dass die Kopfzeilen fehlerhaft sind bzw. an ungültigen Stellen ankamen.
Durch den Puffer werden erst alle Befehle ausgeführt und diese, die den Header verändern, werden als erstes an den Browser gesendet, danach kommt der ganze Rest der Seite. D.h. man kann nun mitten im Script die Formatierung oder ähnliches ändern und PHP würde die vorher gesetzte überschreiben und darauf an den Browser senden. Erst danach wird die eigentliche Seite gesendet.
Hier ein Beispiel zur Verwendung:

ob_start();
session_start();
echo 'foo';
header('Content-Type: text/html;');
echo 'bar';
include('datei.php');
ob_flush();

datei.php

header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');

Es kommt zu keinen Fehler, da der header Befehl innerhalb des Output Bufferings ausgeführt wird.
Fragen und Anregungen sind gern gesehen und können entweder in den Kommentaren oder bei Designers-Place geschrieben werden.

Liebe Grüße
iNaD

Kategorien: PHP, Tipps & Tricks

Kleine ifs – große Wirkung » « Sessions kurz erklärt

2 Kommentarer

  1. Endlich mal eine gut verständliche Beschreibung! Sowas hab ich im PHP-Handbuch nicht gefunden – fehlt dort oder ist (für mich) zu gut versteckt;-)

    Ali53

    • iNaD

      9. Februar 2010 — 18:33

      Gern geschehen 😀
      Ich werde diesen Artikel wohl demnächst erweitern 😉 Da man mit dem Output Buffering auch noch andere Spielereien machen kann.
      Jedoch wusste ich das noch nicht so lange.

Kommentar verfassen

Copyright © 2017 theiNaD

Design von Anders NorenHoch ↑