Update einer “Lost-Joomla-Instanz”

Aus einem Schülerprojekt hatten wir eine Joomla-Instanz “geerbt”. Betrieben außerhalb des eigenen Verantwortungsbereiches. Aber wie so oft – ein damals wie heute unterstützeneswertes Projekt. Was also machen? Die Initiatoren mit dem Thema alleine lassen? Naja – man kann ja mal einen kurzen Blick riskieren.

Zugang verschaffen
Gerade nach so langer Zeit ist ggf. der Zugang nicht mehr bekannt.

Am einfachsten ist es an dieser Stelle, dass Passwort in der Datenbank neu zu setzen (vergl. https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/de Methode 2); dies kann einfach via phpmyadmin realisiert werden.

Alt, älter, ganz alt … Joomla und PHP-Kompatibilität
In unserem Fall war Joomla “mittelalt”, jedoch alt genug um nicht mehr mit PHP5.6 oder neuer zu laufen.

Aber wie bekommt mein eine PHP5.4-Umgebung. Am einfachsten geht es natürlich schnell mit einer passenden virtuellen Maschine mit Debian (z.B. Wheezy) und PHP 5.4. Wer keine VM zur Verfügung hat, kann auch WAMP unter Windows installieren (https://sourceforge.net/projects/wampserver/ – benötigt wird hier die Version 2.2e. Nach dem Download muss in der PHP-Konfiguration jedoch noch zwingend openSSL aktiviert werden.

Die bisherige Joomla-Installation wird nun lokal im passenden Verzeichnis abgelegt und die gesicherte Datenbank (z.B. via phpmyadmin über http://localhost/phpmyadmin) eingespielt. In der configuration.php nun bitte zunächst Pfade und Datenbank-Zugangsdaten eintragen und etwaige Redirects durch Umbenennen der .htaccess deaktivieren. Mit http://localhost/administrator/index.php sollte nun die gewohnte Admin-Oberfläche wieder verfügbar sein.

Der erste Zugriff
Unter System –> Systeminformation solle man sich nun zunächst einen ersten Überblick verschaffen und die Verzeichnisrechte überprüfen.

Das Update darf auf keinen Fall direkt auf die neueste Version erfolgen. Im vorliegenden Fall war die Version 3.1.5.

Die ersten zwei Updates
Zunächst unter Erweiterungen -> Aktualisieren den Cache “Leeren” und nach “Aktualisierungen” suchen. Im vorliegenden Fall konnte nun über Aktualisieren bzw. Komponenten -> Joomla!-Aktualisierung ein Update auf 3.2.7 angestoßen werden.

Das Updaten auf die nächste Version (3.4.8) muss nun jedoch via Download erfolgen. Das Updatepaket wird dazu heruntergeladen (Link: https://downloads.joomla.org/cms/joomla3/3-4-8/) und nach C:\wamp\www\tmp\Joomla_3.4.8-Stable-Update_Package entpackt.

Über den Extension-Manager kann das Paket nun direkt aus dem Verzeichnis installiert werden:

Die aktuell installierte Version wird immer unten rechts angezeigt

Nun sollte die Joomla-Instanz zumindest mit PHP5.6 lauffähig sein. Wir haben sie daher an dieser Stelle zurück auf den Server kopiert (Dateien mit FileZilla, Datenbank via phpmyadmin).

SURY – das PHP-Wunder
Auf dem produktiven Webserver haben wir mehrere PHP-Versionen im Einsatz. Neben der produktiven, haben wir stets eine PHP5.6 und diverse PHP7.x als CGI-Versionen verfügbar. So kann man auch in diesem Fall eine einfache “Migrations-Domain” migration.mein-projekt.de mit PHP5.6 bereitstellen.

Sury gibt es via https://packages.sury.org/php/README.txt
(Achtung: PHP 5.6 und PHP7.0 sind bereits abgekündigt!)

Weiter mit dem Update
Nachdem die Seite nun wieder live im Internet ist, sollte zunächst dringend das Passwort wieder geändert werden. Auch sollte der Webserver mittels HTTP-AUTH vor zu neugierigen Zugriffen geschützt werden, bis das Update abgeschlossen ist.

Alle weiteren Updates geschehen nun über Komponenten –> Joomla!-Aktualisierung. Eine gute Anleitung hierzu gibt es unter https://website-bereinigung.de/blog/joomla-update-wird-nicht-angezeigt.

Ab Versionen >= 3.5 sollte PHP7 unterstützt werden. Bei unserer Migration scheiterten wir ab Version 3.6.5 jedoch bei der Verwendung von PHP-Versionen größer PHP7.0 (also mit PHP7.1/7.2/7.3 – während bereits vorhandene Instanzen jedoch mit PHP7.3 reibungslos funktionierten). Hier werden wir wohl noch etwas Nacharbeit investieren müssen, um auch die veraltete PHP7.0 deaktivieren zu können.

Ergänzung – abschließende Lösung?
Alle PHP-Versionen benötigen die Pakete php7.1-mysql und php7.1-xml bzw. php7.2-mysql und php7.2-xml. Dann klappt es auch mit allen Versionen >PHP7.0.

Wer Debugging für Joomla anschalten möchte – dies geht in der configuration.php:
Maximales Error-Reporting: public $error_reporting = ‘X’;
Standard: public $error_reporting = ‘default’;

Ergänzung II – Fehler “using $this when not in object context”
Der Fehler tritt erst ab >PHP7.1 auf und deutet häufig auf ein veraltetes Template hin. In unserem Fall ein selbst erstelltes mit ganz vielen “echo $this->template”.