Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

echo-Ausgaben abfangen

Ein kleiner Trick mit dem sich die Ausgaben von echo() aufzeichnen lassen und das Senden dieser verhindert wird.

Eigentlich ist es guter Stil, dass Funktionen/Methoden ihre Ergebnisse per return zurückgeben und dann das „übergeordnete” Programm entscheidet, wann diese gesendet werden. Häufig trifft man allerdings noch immer auf Funktionen oder Methoden, die stattdessen ihre Ergebnisse direkt per echo() an den Besucher senden. Das verringert die Flexibilität und verhindert zum Beispiel, dass die Ergebnisse nachbearbeitet werden (etwa mit einem regulären Ausdruck). Sehr häufig entsteht dadurch auch der headers already sent-Fehler (echo() bewirkt, dass die Header-Daten gesendet werden — danach darf man dann keine weiteren Header mehr senden und daher auch keine Cookies mehr ändern). Mit Hilfe von ob_start(), ob_get_contents() und ob_end_clean() lassen sich derartige Nerv-Funktionen bändigen indem ihre Ausgaben kurzerhand abgefangen werden.

Die drei Funktionen bewirken im einzelnen:
  • ob_start(): Startet das „Abfangen” bzw. Aufzeichnen. Nachfolgende Ausgaben per echo() werden gespeichert und nicht gesendet.
  • ob_enc_clean(): Gibt alle aufgezeichneten Ausgaben als String zurück.
  • ob_end(): Beendet das Abfangen/Aufzeichnen.

Beispiel:
PHP-Code
<?php
    echo("(1) Das wird sofort gesendet\n");

	// Abfangen starten
	ob_start();

	// Das wird abgefangen
	echo("(2) Das wird nicht sofort gesendet.\n");

	// Aufzeichnungen abspeichern
	$content = ob_get_contents();

	// Abfangen beenden
	ob_end_clean();

	// Etwas anderes senden
	echo("(3) Das wird jetzt als zweites gesendet.\n");

	// erst jetzt wird der abgefangene Inhalt gesendet
	echo($content);
?>
Ausgabe
(1) Das wird sofort gesendet
(3) Das wird jetzt als zweites gesendet.
(2) Das wird nicht sofort gesendet.

Hinweis: Die ob_* Funktionen lassen sich beliebig verschachteln. Hat man ob_start() also bereits aufgerufen (zum Beispiel um die Komprimierung per gzip zu aktivieren), dann kann man den vorherigen Code trotzdem bedenkenlos verwenden.