Willkommen in der Webstatt Zum Webstatt Blog und Stories
Franky Franky am 28.01.07 21:46

Moin,

wo wir das Thema hier gerade hatten, wollt ich dazu auch eben noch etwas schreiben.
Jeder kennt Funktionen wie [FONT=courier new]highlight_string()[/FONT] oder [FONT=courier new]print_r()[/FONT]. Dazu muss man kein großer "Könner" sein.

Wendet man diese Funktionen an ist auch normalerweise kein echo notwenig, nein, in diesen Funktionen steckt schon das echo mit drin.

Eigentlich sehr praktisch, allerdings kann es dann doch ganz schön nerven, wenn man z.B. die Ausgabe der jeweiligen Funktion mal nicht sofort ausgeben will sondern z.B. um sie noch mittels Regex zu preparieren erst noch in einer Variable speichern will.

Die erste Möglichkeit wäre jetzt die Ausgabe mittels den vorgesehen PHP-Funktionen zu cachen, dass geht z.B. so:
<?php
ob_start();
highlight_file('meine-testdatei.php');
$output = ob_get_contents();
ob_end_flush();
// $output enthält so den Inhalt der "gehighlighteten" PHP-Datei "meine-testdatei.php"
?>


Diese Möglichkeit ist...
[list=1]
[*]veraltet und
[*]langam.
[/list=1] Dies merkt man spätestens dann, wenn man eine sehr besucherlastige Seite hat und Codeteile immer "on-the-fly" generieren lässt.

Um nun auf den eigentlichen Zweck dieser Anleitung zurückzukommen, gibt es auch eine wesentliche bessere Möglichkeit:
Im deutschen PHP-Manual nicht erwähnt lauert auch noch ein zweiter Parameter von [FONT=courier new]highlight_file()[/FONT] auf und wartet nur darauf entdeckt zu werden :D

Diesen Parameter beschreibt man im englischen PHP-Manual als [FONT=courier new]return[/FONT]; es wird ein boolischer Wert erwartet ([FONT=courier new]true[/FONT]/[FONT=courier new]false[/FONT]). Und genau das ist der "Schalter", der für das direkte Ausgeben verantwortlich ist. Steht er auf true, wird der Inhalt nur "per return" zurückgegeben und kann nun auch in einer Variable gespeichert werden.
So sieht das ganze aus:
<?php
$output = highlight_file('meine-testdatei.php', true);
// $output enthält so den Inhalt der "gehighlighteten" PHP-Datei "meine-testdatei.php"
?>


Jap, mehr ist das wirklich nicht -- der Code ersetzt komplett unseren oberen Code und ist dazu noch schneller, da das Zwischenspeichern entfällt.

Dieser zweiter Parameter funktioniert u.a. auch in Funktionen wie [FONT=courier new]print_r()[/FONT] und [FONT=courier new]highlight_string()[/FONT]; leider allerdings (noch) nicht in der Funktion [FONT=courier new]phpinfo()[/FONT].

____
Geschrieben am 28. Januar 2007, 21:43 Uhr von Franky

Lizensiert unter:
[IMG]http://i.creativecommons.org/l/by-nc-sa/2.0/de/88x31.png[/IMG]

netcup.de Warum gibt es hier Werbung?
Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt