PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

Ausgaben von PHP Programmen abfangen

26 April, 2009 (17:07) | Code-Schnipsel, PHP | Von: PHP Maniac

Beim Arbeiten mit PHP Programmen anderer Programmierer steht man manchmal vor dem Problem, dass diese nicht so arbeiten wie man es gerne hätte. Wenn es nicht gerade um komerzielle Software handelt, die mit Zend oder ähnlichem Verschlüsselt ist, könnte man sich natürlich in den Code einlesen und alles so anpassen wie es einem passt. Allerdings sollte man auch bei komplexer freier Software wie WordPress oder einem CMS immer vermeiden an der Codebasis Änderungen vorzunehmen. Spätestens beim nächsten Update gibt es dann nämlich Probleme oder, im besten Fall, werden lediglich die eigenen Änderungen rückgängig gemacht.

Theorie…

Um dieses Problem zu lösen, lässt sich das Output Buffering von PHP zweckentfremden. Ursprünglich dafür gedacht den Inhalt einer Webseite erst auszugeben, wenn das PHP Programm komplett beendet ist, fängt das Output Buffering zunächt jegliche Ausgaben ab. Somit lassen sich Änderungen am Header auch noch durchführen, wenn schon die ersten Ausgaben erfolgt sind, da zunächst alles in den Buffer wandert. Wird das PHP Programm jetzt beendet oder ein entsprechender Befehl zum Leeren des Puffers aufgerufen, so gibt PHP den Inhalt des Zwischenspeichers an den Browser aus und die Seite wird wie gewohnt dargestellt:

ob_start();
/*Programmcode*/
ob_end_flush();

Es existiert jedoch auch die Möglichkeit an den Inhalt des Buffer zu gelangen, dies erledigt die Funktion ob_get_contents(). Wenn man jetzt noch, statt den Buffer auszugeben, dessen Inhalt löschen lässt, so kann die abgefangene Ausgabe in einer beliebigen Variable gespeichert werden, ohne das etwas an den Browser geschickt wird. Nachdem der so abgefangene Inhalt dann wie gewünscht manipuliert wurde, gibt man ihn einfach an den Browser aus und alles ist bestens.

…und Praxis

ob_start();
 
/*Hier kann jetzt die Ausgabe erfolgen, die Abgefangen werden soll*/
 
$data = ob_get_contents();
ob_end_clean();
 
/*Verändern der abgefangenen Daten*/
$data = str_replace('Hallo', 'Hi', $data);
echo $data;

Somit lassen sich ohne Änderungen an der Originalsoftware durchaus Änderungen am Erscheinungsbild durchführen. Ich selbst habe diese Technik oft im Zusammenhang mit dem Seitentitel verwendet um z.B. die Reihenfolge der Wörter im Titel zu ändern. Aber wie immer sind der Fantasie hier keine Grenzen gesetzt…

Be Sociable, Share!

Kommentare

Pingback von HTTP Header mit PHP verändern – PHP Maniac – Das PHP Blog
Datum 11. Mai 2009 um 09:16 Uhr

[…] false, so kann der Header ohne Probleme direkt geändert werden. Alternativ kann mit Hilfe des Output Bufferings jegliche Ausgabe des PHP Skripts so verzögert werden, dass an jeder beliebigen Stelle im Skript […]

Pingback von Cronjob Alternative mit PHP – PHP Maniac – Das PHP Blog
Datum 17. Mai 2009 um 16:44 Uhr

[…] erfolgen, da diese sonst an den Benutzer gesendet werden würden. Hier empfiehlt es sich die Ausgaben mit dem Output Buffering abzufangen und per Email an den Administrator zu Debug-Zwecken […]

Schreibe einen Kommentar