| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Feb | Jun » | |||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
- Allgemein (2)
- Apache (2)
- Blender (1)
- Cups, Druck (1)
- Eclipse für PHP-Projekte (7)
- Erfahrungsberichte (68)
- Firewall Netfilter Iptables (1)
- Hardware, Treiber (13)
- Impressum (1)
- KDE (39)
- Kontact - Kmail (11)
- LAMP / Webentwicklung (28)
- LibreOffice, OpenOffice (8)
- Linux 3D Desktop (8)
- MySQL (1)
- Netzwerk (8)
- Open Source (1)
- Open-Xchange (11)
- Open-Xchange 5 (9)
- Open-Xchange 6 (2)
- Opensuse 12.1 (2)
- Postfix, Cyrus, Kmail (7)
- Sound (8)
- Verschlüsselung (Mail, SSH) (4)
- VMware Workstation (12)
- Web - Browser und Co. (11)
- Xen und KVM (2)
- 8.1.2012: Opensuse 12.1 - Erfahrungen mit einer Neuinstallation
- 3.1.2012: Opensuse 11.4 / 12.1 - Problem mit ssh -X
- 28.11.2011: Cyrus IMAP unter Opensuse auf die Schnelle
- 5.11.2011: Kontact 4.7 und OX 6 unter Opensuse 11.4 - Teil II
- 29.10.2011: Kann man KDE professionell nutzen ?
- 21.10.2011: Libreoffice 3.4, Scrollbar-Fehler, KDE 4.7
- 23.8.2011: Opensuse 11.4, samba, apparmor-Problem
- 21.8.2011: Kontact 4.7 und OX 6 unter Opensuse 11.4 - Teil I
- 17.8.2011: MySQL - Sortierung in UNION Statements
- 3.8.2011: Buchempfehlungen zu CSS2
homepages
- Januar 2012
- November 2011
- Oktober 2011
- August 2011
- Juli 2011
- Mai 2011
- April 2011
- März 2011
- Februar 2011
- Januar 2011
- Dezember 2010
- Oktober 2010
- September 2010
- August 2010
- Juli 2010
- Juni 2010
- Mai 2010
- April 2010
- März 2010
- Februar 2010
- Januar 2010
- Dezember 2009
- November 2009
- Oktober 2009
- September 2009
- August 2009
- Juli 2009
- Juni 2009
- Mai 2009
- April 2009
- Februar 2009
- Januar 2009
- Dezember 2008
- November 2008
- Oktober 2008
- September 2008
- August 2008
- Juli 2008
- Juni 2008
- Mai 2008
- Februar 2008
- Oktober 2007
- September 2007
- Juli 2007
Weboutput von PHP in Datei umlenken
Problemstellung
In einem unserer letzten Projekte stellte sich das Problem, den Output eines PHP-Programms - eine Webseite - nicht per HTTP zu einem Browser zu transportieren, sondern parallel auch als Datei wegzuschreiben. Die Webseite wurde auf Basis eines TPL-Templates erzeugt.
Lösungsansatz
Nun könnte man meinen, dass man hierzu in komplizierter Weise neben den Befehlen zum Füllen des Templates parallel fwrite-Befehle absetzen muss. Es geht jedoch viel kompakter und einfacher, indem man den Output puffert und die gepufferten Strings in die gewünschte Datei schreibt.
Diese Lösung haben wir ”’Jani Hartikainen”’ zu verdanken und in seinem Blog gefunden.
Lösung
Zu benutzen sind die Funktionen ob_start() und ob_end_flush(). Die Funktion ob_start() akzeptiert einen optionalen Parameter für eine callback-Funktion und hier setzt das Verfahren an.
Wir zeigen das an einem einfachen Beispiel, nämlich den letzten Zeilen des Codes zum Füllen eines ITX-Templates
****************
function generate output ()
{
// letzter Schritt im template, z.B. Anzeige von Warnungen und Fehlern
$template->setCurrentBlock(”ERROR_VA”);
$template->setVariable(”ERR_VIS”, $vis_error);
$template->setVariable(”ERROR_MSG”, $error_msg);
$template->parseCurrentBlock();
// Öffnen eines Files
$ob_file = fopen(’output.html’,'w’);
// Pufferung unter Rückgriff auf die callback-Funktion aktivieren
ob_start(’ob_file_callback’);
// Der Output - nämlich in diesem Fall die aus dem Template HTML-Datei wird in den Puffer gelenkt
$template->show();
// Pufferung beenden und File schließen
ob_end_flush();
fclose($ob_file);
exit;
}
function ob_file_callback($buffer)
{
global $ob_file; // hier kann man über das Erstellen einer Klasse viel verbessern
fwrite($ob_file, $buffer); // Umlenken des Puffers in die Datei output.html
// Das nachfolgende Return-Statement sorgt dafür, dass der Output gleichzeitig auch auf dem Browser-Schirm zu sehen ist.
return $buffer;
}
****************
Verbesserungen
Dieses Beispiel verdeutlich nur das Prinzip. Jani Hartikainen beschreibt in seinem Blog-Artikel, wie man das Vorgehen in einer Klasse kapselt. Der geschätzte Leser möge sich dort bitte weiter informieren.
Antwort schreiben
Sie müssen als angemeldet sein, um einen Kommentar schreiben zu können.