Application Instantiation Error nach Update auf 3.6.5

  • Hallo zusammen,


    ich habe vor einigen Tagen auf einer von mir betreuten Seite das Update der Joomla Version 3.4.8 auf 3.6.5 durchgeführt. Seit dem bekomme ich den im Titel genannten Fehler auf einer Unterseite mit custom PHP-Code.


    Zunächst die Systeminfos:
    - CentOS 6
    - PHP 7.0.14 (FastCGI Apache), aktualisiert von 5.5.38
    - Joomla 3.6.5


    Ich habe einen Beitrag erstellt, in dem ich per iframe verschiedene externe PHP-Sktipte lade und ausführe. Dieser Beitrag ist nur für eingeloggte Benutzer mit entsprechenden Rechten einsehbar. In dem betroffenen PHP-Skript lese ich einige Benutzerdaten aus der Joomla-Datenbank aus:


    Dabei wird genau an der Stelle $mainframe = JFactory::getApplication('site'); der Fehler erzeugt:


    Error displaying the error page: Application Instantiation Error: Failed to start the session because headers have already been sent by "/var/www/vhosts/XXX/httpdocs/userList.php" at line 929.


    Entferne ich in der Zeile das 'site', dann fällt der Teil ab "Failed to start the session..." in der Fehlermeldung weg.


    Konsequenz ist aber immer, dass die Variablen für die Benutzerdaten leer sind.


    Beliebter Spruch: bisher hat es immer funktioniert.


    Ich bin nun schon einige Stunden am suchen, probieren und basteln ohne was zu erreichen. Datenbank-Reparatur habe ich bereits probiert (in Joomla und PHPMyAdmin). Ich bin für jeden weiteren Hinweis dankbar.

  • Das Problem ist simpel und geht auch aus der Fehlermeldung hervor: Joomla setzt bei der Initialisierung diverse Header, unter anderem das jeweilige Session Cookie, das beim Start der Session gesetzt wird.


    Dein Skript besteht vermutlich aus einem HTML-Block, auf den dann irgendwann der PHP-Block mit der Initalisierung folgt. Und hier liegt das Problem: in dem Moment, wo du die erste Zeile HTML ausgibst wird diese bereits an den Browser weitergegeben. Damit der Transfer starten kann, muss aber auch bereits der HTTP Header mitgeschickt werden, weshalb Joomla in deinem folgenden PHP-Block die benotigten Header nicht mehr setzen kann und einen Fehler erzeugt.


    Ergo: erst PHP, dann HTML - alternativ den Output Buffer nutzen.

  • Vielen Dank für den Hinweis!


    Manchmal sieht man den Wald vor lauter Bäumen nicht. Verwunderlich ist nur, dass das vor dem Update funktioniert hat.


    Jetzt werden zwar die Funktionen aus dem JavaScript-Block, der ursprünglich vor dem php-Block stand, nicht mehr erkannt, aber dafür wird sich eine Lösung finden lassen.