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.

Problemchen mit dem Opensuse Updater

Auf OpenSuSE-Plattformen gibt es im KDE-Desktop ein kleines nützliches Applet, dass neue Updates anzeigt und über yum auch installiert. Bei mir funktionierte seit 2 Tagen aber plötzlich nur noch die Anzeige der neu verfügbaren Updates – das Durchführen einer Updateinstallation schlug jedoch fehl. Der Updater begann vielmehr erneut damit, den Stand der Softwarepakete mit den Repositories im Internet zu vergleichen, ohne die Installation der zuvor ausgewählten Pakete durchzuführen.

Als Ursache für dieses fehlerhafte Verhalten entpuppte sich der Dialog zur Root-Passwort-Eingabe (natürlich kann nur Root die Updates) installieren.

Dialog_root_pwd

Dieser Dialog hatte bei mir das Flag “Passwort behalten” gesetzt. Dieses Flag muss offenbar deaktiviert werden (s. Abbdg.). Dann läuft der Installationsvorgang korrekt ab.

SuSE sollte das korrigieren. Aus meiner Sicht sollte man die Option zum Merken des Root-Passwortes überhaupt nicht anbieten.

Posted in KDE

OX5 – Login Problem mit Konqueror – Nachtrag III

Das Problem mit dem Login in einen OpenXchange-Server und der korrekten Abarbeitung von http-Headern – siehe

https://linux-blog.anracom.com/2007/10/06/konqueror-ox5-login-problem-nachtrag-i

und

https://linux-blog.anracom.com/2007/10/06/konqueror-ox5-login-problem-nachtrag-ii/

– ist in den aktuellen KDE Version 3.5.8 endlich behoben!

Ein großes Dankeschön an die KDE-Entwickler !