Hans Wittwer

Geschichten, die das Leben schrieb

Hinweise

PHP Ausgabepufferinhalt ändern

🏁

Ausgabepuffer, was ist das? Ein PHP-Skript schreibt, während es läuft, alles in einen Speicher. Diesen Speicher nennt man Puffer. Sobald das Skript beendet ist, wird der Inhalt von diesem Puffer an den Browser gesandt.

Einleitung

Nur einen Ausgabepuffer? Ja und nein. Das System hat genau einen Systemausgabepuffer und kann einen oder mehrere eigene Puffer haben. Das System kann so eingestellt sein, dass es direkt in den Systemausgabepuffer oder zuerst in den eigenen Puffer schreibt. Den Inhalt vom Systemausgabepuffer kannst Du nachträglich nicht mehr verändern, nur löschen. Den Inhalt vom eigenen Puffer kannst Du hingegen noch bearbeiten, und das ist ein Vorteil.

Wie Dein System konfiguriert ist, kannst Du mit folgender Funktion überprüfen.

		ini_get('output_buffering')
	

Wenn eine Zahl herauskommt, etwa 4096, dann ist die Pufferung eingeschaltet.

Mit der folgenden Funktion kannst Du einen weiteren eigenen Puffer starten.

		ob_start()
	

Der zuletzt gestartete Puffer wird zum aktiven Puffer. PHP schreibt immer in den aktiven Puffer.

Den Inhalt vom aktiven Puffer kannst Du in eine Variable laden, den Inhalt der Variable nach Belieben verändern und erneut ausgeben. Den Inhalt vom aktiven Puffer kannst Du löschen und den Puffer schliessen.

Jedenfalls sendet PHP, nach Beendigung des Skripts, der Reihe nach alle Inhalte der noch vorhandenen eigenen Puffer an den Systemausgabepuffer.

Eigener Puffer starten und Daten aus dem Puffer modifizieren

Einen eigenen Puffer öffnen

		if (ob_start() == false) {
                    exit("ob");
                }
	

Warum so? Weil ob_start() wahr meldet, wenn der Puffer gestartet wurde. Ansonsten wird das Skript verlassen und ob geschrieben, damit Du siehst, dass der Puffer nicht gestartet worden ist.

In den eigenen Puffer schreiben.

		echo "Mein Name ist [[name]]";
	

Den Inhalt vom eigenen Puffer holen und den eigenen Puffer leeren und schliessen.

		$eigener_puffer = ob_get_clean();
	

Den Inhalt aus dem eigenen Puffer bearbeiten.

		$Vorname = "Housi";
		$pos1 = strpos($eigener_puffer, '[[', 0);
		$pos2 = strpos($eigener_puffer, ']]');
		$placeholder = substr(substr($eigener_puffer, $pos1, $pos2 - $pos1 + 2), 2, - 2);
		if ($placeholder == 'name') {
		    $eigener_puffer = substr_replace($eigener_puffer, $Vorname, $pos1, $pos2 - $pos1 + 2);
		}

	

Den bearbeiteten Inhalt an den aktiven Puffer ausgeben.

		echo $eigener_puffer;

	

PHP-Skript bearbeiten und interpretieren.

PHP-Skript aus einer Datei holen.

		$data = file_get_contents("data.php");
	

Oder von Hand schreiben.

		$data = '<?php echo "Ich bin [[name]]";'
	

Welche Art Du wählst, ist unerheblich. Jetzt bearbeiten …

		$Vorname = "Housi";
		$pos1 = strpos($code, 'Der Platzhalter ', 0);
		$pos2 = strpos($code, ' ist mir nicht bekannt, was soll ich tun?');
		$placeholder = substr(substr($code, $pos1, $pos2 - $pos1 + 2), 2, - 2);
		if ($placeholder == 'name') {
		    $code = substr_replace($code, $Vorname, $pos1, $pos2 - $pos1 + 2);
		}

	

Das bearbeitete PHP-Skript interpretieren und ausgeben.

		if (ob_start() === false) {
 		   exit("ob");
		}

		eval("?>$code");

		echo ob_get_clean();
		

	

Zu welchem Zeitpunkt Du welche Daten wo ändern möchtest, überlasse ich gerne Dir.

Achtung, das Konstrukt eval() zu benutzen, kann sehr gefährlich werden. Du musst genau verstehen, was Du tust und was gefährlich sein kann. Hacker freuen sich, wenn Du eval() verwendest, Server-Side-Scripting lässt grüssen. Zudem unterstützt Dich die eingebaute Fehlerbehandlungsroutine nicht, falls Fehler im Skript sind, die normalerweise gefunden würden.

Zurück zum Inhaltsverzeichnis