Infos & Service

So machen Sie Ihre PHP-Applikationen fit für aktuelle PHP-Versionen


Veröffentlicht am 11.10.2019 von Nils Dornblut

Zur Sicherheit Ihrer Online-Präsenz und unserer Serversysteme, werden wir in Zukunft keine veralteten PHP-Versionen mehr zur Verfügung stellen. Wenn Sie noch PHP Versionen 4, 5, 7.0 oder 7.1 nutzen, finden Sie in diesem Beitrag hilfreiche Erklärungen, Tipps und Links, die Sie bei der Umstellung Ihrer Applikationen auf eine aktuelle PHP Version unterstützen können.

Ihre Ausgangssituation

Für die nötige Migration auf eine neue PHP-Version sind zwei unterschiedliche Szenarien denkbar:

  1. Update von allgemeinen (Open-Source) Applikationen / Skripten wie Typo3, Joomla, Shopware oder Wordpress
  2. Migration eigener Applikationen / Skripte

Grundsätzlich sollten Sie sich vorab einen Überblick verschaffen, welche Applikationen Sie auf Ihren Websites verwenden. Hier bietet es sich an eine Liste anzufertigen, die den Namen der Applikation die installierte Version, zusätzlich installierte Plugins, Hinweis auf allgemeine/eigene Applikation, den Anwendungszweck und ggf. weitere Bemerkungen enthält.

Ist diese erstellt, klären Sie, ob die jeweilige Applikation noch einen Anwendungszweck hat, wie stark sie genutzt wird und ob eine weitere Verwendung gerechtfertigt ist. Halten Sie dies bitte in Ihren Notizen fest. So erhalten Sie eine gute Grundlage, die Ihnen im späteren Verlauf als Stütze dient und weiter ergänzt werden kann.

Noch ein Hinweis an dieser Stelle: Grundsätzlich ist es erst einmal egal, mit welcher PHP-Version die jeweilige Applikation aktuell betrieben wird. Wichtig ist, dass Sie auf die neueste PHP-Version aktualisieren, die in der Produktivumgebung (Webserver) zur Verfügung steht. Das bedeutet aktuell eine Aktualisierung auf mindestens PHP 7.2, wir empfehlen PHP 7.3.

Update von allgemeinen (Open-Source) Applikationen

In vielen Fällen handelt es sich bei solchen Applikationen um eine Art von Open-Source-Software. Es kann natürlich auch eine proprietäre (kommerzielle) Software handeln. Die auszuführenden Schritte sollten sich aber weitestgehend gleichen. Bei proprietärer Software kann, je nach Servicevertrag und Lizenzpolitik, ggf. der Kauf einer aktuellen Lizenz oder eines Upgrades für die gewünschte neue Version erforderlich sein. 

In der nachfolgenden Tabelle finden Sie die aktuell eingesetzten Versionen der jeweiligen Applikationen. Auf den Seiten der Hersteller bzw. der Entwickler ist es aber oft schwierig herauszufinden, bis zu welcher PHP-Version die aktuell eingesetzte Version der Applikation genutzt werden kann. Generell empfehlen wir Ihnen stets eine Aktualisierung auf die neueste verfügbare stabile Version zu machen. Ausnahmen sollten Sie nur bei bekannten Inkompatibilitäten oder Bugs zulassen. In den Release Notes der neuesten Versionen finden sich oftmals Hinweise, mit welcher PHP-Version diese kompatibel sind. 

Bei weit verbreiteten Applikationen erfolgt die Umstellung auf neue PHP-Versionen oft sehr frühzeitig, bei weniger bekannten aber durchaus auch mit Verzögerung. Oftmals finden sich entsprechende Hinweise in den „Technische Anforderungen“ oder „Technical Requirements“. Die nachfolgende Tabelle (Stand 30.09.2019) zeigt Ihnen, welche gängigen Webanwendungen in welcher Version mit PHP 7.2 bzw. PHP 7.3 kompatibel sind. Unsere Empfehlung ist, aktualisieren Sie direkt auf PHP 7.3 und installieren Sie die neueste Version der Applikation. Bitte beachten Sie, dass es hierbei um Versionsangaben für die Grundinstallation geht und über installierte Plugins oder Themes keine Aussage getroffen werden kann, worauf wir später noch genauer eingehen.

WebanwendungPHP 7.2 kompatible VersionPHP 7.3 kompatible Versionneueste
Version
Contao (Download)3.5.36 3.5.364.8 / 4.4 LTS
Contenido (Download)4.104.104.10
Drupal (Download)7.598.6.48.7.7
Joomla (Download)3.83.9.13.9.12
Magento (Download
inoffizielle LTS)
1.9.3.9 (Installation des Patches notwendig)Nicht unterstützt(soll kommen)1.9.4.2
Magento 2 (Download)2.3Nicht unterstützt (2.3.3 soll das beinhalten)2.3.2
ModX Revolution (Download)2.6.52.7.12.7.2
ModX Evolution (Download Nachfolger)1.4Inoffizieller Nachfolger

1.4.9 (inoffizieller Nachfolger)
NextCloud (Download)131516.0.5
OwnCloud (Download)10.0.5Nicht unterstützt(10.3 soll das beinhalten)10.2.1
Oxid (Download)6.16.1.16.1.4
Redaxo (Download)5.65.75.8.0
Shopware (Download)5.3.55.65.6.1 / 6.0.0 (Early Access)
Typo3 (Download)v7v99.5.9
Wordpress (Download)4.95.0.15.2.3
xt:Commerce (Download)5.16.16.1.2

 

Sollten Unklarheiten bleiben, lohnt sich eine gesonderte Installation der Applikation auf einer anderen Testdomain und ein Test mit der gewünschten PHP-Version. Je nach Konfiguration der PHP.INI von PHP werden Ihnen Inkompatibilitäten bei Seitenaufrufen direkt angezeigt oder in eine Logdatei geschrieben. Bitte beachten Sie, dass Sie konfigurieren können, welche Fehler angezeigt werden sollen. Alle Einstellungen können Sie über den PHP.INI-Editor im Kundenmenü anpassen (FAQ).

Nachdem Sie herausgefunden haben, auf welche Version der Applikation Sie aktualisieren müssen, können Sie die dafür notwendigen Schritte festlegen. In den Release Notes bzw. den Ankündigungen der jeweiligen Versionen finden Sie meist Links auf Anleitungen für eine Aktualisierung. Je nach Größe des Versionssprungs kann es erforderlich sein, mehrstufig vorzugehen, also erst eine Aktualisierung auf beispielsweise Version 2 und dann erst auf die Version 3. Viele Applikationen bieten entsprechende Mechanismen, die Updates nacheinander mehr oder weniger automatisiert durchführen. Manche Applikationen, wie z. Bsp. Wordpress, bieten Ihnen die Möglichkeit das direkt in der Administrationsoberfläche zu tun. Bevor Sie mit der Ausführung beginnen, verschaffen Sie sich am besten einen Überblick, was wie machbar ist.

Viele Applikationen bieten durch Plugins die Möglichkeit, Erweiterungen der eigentlichen Funktionalitäten zu erreichen. Für die installierten Erweiterungen (siehe vorab erstellte Liste) sollten Sie ebenfalls prüfen, ob und welche Updates zur Verfügung stehen. Hierbei sollten Sie besonders beachten, dass die Zielversion der Applikation unterstützt wird und auch die erforderliche PHP-Version Grundlage für die Version des Plugins ist. Leider gibt es auch hier selten gut geführte Übersichten und es ist oft eine Recherche in den jeweiligen Release Notes erforderlich. Tests vorab können - wie bereits beschrieben - in einer gesonderten Installation erfolgen.

Wenn Sie all dieaufgeführten Schritte durchgeführt haben, empfehlen wir, das eigentliche Update vorab zu testen. Hierfür müssen Sie die Daten und meist auch die Datenbank, vorab in eine Testinstanz kopieren. So können Sie in Ruhe testen und einen eigenen Plan für das Update des Livesystems entwickeln. Steht Ihnen keine gesonderte Test-Domain für die Umschaltung der PHP-Version zur Verfügung, können Sie auch die PHP-Version einzelner Verzeichnisse anpassen.

Wenn der Plan steht und Sie die entsprechende Herstellerdokumentation mit eigenen individuellen Gegebenheiten/Details verfeinert haben, können Sie die Aktualisierung durchführen. Bitte vergessen Sie nicht vorab ein Backup der Daten und der Datenbank zu erstellen, damit im Zweifelsfall zurückgerollt werden kann.

Sollte es für die von Ihnen verwendete Applikation oder Plugins keine passende Version geben, erwägen Sie den Einsatz von entsprechenden Alternativen. Für weit verbreitete Plugins und Applikationen gibt es oft entsprechende Möglichkeiten. Recherchieren Sie im Internet. Sie finden für gängige Fragestellungen meist Lösungsvorschläge anderer Anwender.

Sollten Sie auch hier zu keinem Ergebnis kommen, empfehlen wir Ihnen, wie eingangs bereits beschrieben, erneut zu überprüfen, wie wichtig das Plugin oder die Applikation selbst für den Betrieb Ihrer Website ist.

Migration eigener Applikationen

Das Entwicklerteam von PHP erklärt detailliert in jeder neuen Hauptversion (Major) und Unterversion (Minor) welche Schritte bei der Migration einer Applikationen zu beachten sind. Hierbei sind die generellen Neuerungen und explizit die abwärtsinkompatiblen Änderungen (Backward incompatible changes) hauptsächlich interessant. Hier eine Übersicht der relevanten Beschreibungen:

In der Regel muss der PHP-Code nicht geändert werden, da er auch in neuen PHP-Versionen arbeitet. In einigen Fällen ist eine Aktualisierung des PHP-Codes jedoch durchaus sinnvoll. Informationen dazu finden Sie in den vorab aufgeführten verlinkten "abwärtsinkompatiblen Änderungen" neuer PHP-Versionen.

Wenn Sie eine Migration von Version x zu Version y durchführen, müssen theoretisch alle diese betrachten und den Code entsprechend überprüfen. In den verlinkten Beschreibungen finden Sie dazu hilfreiche Tipps.  

Alternativ können Sie den Code auszuführen und auf Fehlermeldungen reagieren, indem Sie den Code an den entsprechenden Stellen ändern. Hierbei müssen Sie von den Fehlermeldungen auf die jeweilige Änderung schließen, was mit einiger Erfahrung zwar zunehmend schneller geht, aber bei größeren Applikationen sehr zeitaufwändig sein kann. Diese Methode kann fehlerbehaftet sein, wenn einzelne Dateien nur in bestimmten Fällen eingebunden werden und Sie so die Probleme nicht für alle Fälle herausfinden können.

Oftmals können Sie sich bei der Migration von PHP 5 auf PHP 7 auf zwei Hauptpunkte konzentrieren und haben den Großteil damit bereits abgedeckt. Es handelt sich hierbei um die POSIX Regex-Funktionen (meist ereg*-Befehle) und mysql-Befehle. Details dazu werden etwas weiter unten beschreiben.

Es gibt einige sehr hilfreiche, automatisierte und sichere Möglichkeiten Inkompatibilitäten im Code Ihrer Applikationen zu finden. Dafür ist die Nutzung der Tools PHPCS Code Sniffer und PHPCompatibility nötig. PHPCS Code Sniffer kennzeichnet PHP-, JavaScript- und CSS-Dateien, um etwaige Verstöße gegen einen definierten Programmierstandard zu erkennen. Dieses Tool kann in Kombination mit PHPCompatibility genutzt werden. PHPCompatibility stellt eine Reihe sogenannter Sniffs für PHP CodeSniffer bereit, die die Kompatibilität von PHP in verschiedenen Versionen überprüfen. Es wird so ermöglicht, den Code einer Applikation auf Kompatibilität mit höheren und niedrigeren Versionen von PHP zu analysieren. Wie das gemacht werden kann und was für Schritte erforderlich sind, wird in dieser Anleitung beschrieben.

Alternativen zum Zugriff auf MySQL

Bereits in PHP 2 wurde die ursprüngliche MySQL-Schnittstelle zum Zugriff auf Datenbanken in PHP implementiert. Aus diversen Gründen ist diese jedoch in PHP 7 endgültig entfallen.

Als Alternative werden die Verwendung der Erweiterungen mysqli oder PDO für MySQL empfohlen. Die bisherigen Aufrufe von MySQL müssen entsprechend ersetzt werden.

Da dies mitunter einigen Aufwand bedeutet, kann alternativ der MySQL-Wrapper für MySQLi genutzt werden. Diese Sammlung von MySQL-Funktionen ermöglicht einen schnellen Wechsel ohne große Anpassungen am Code. Es muss nur der Wrapper mysql.php in das eigene Projekt kopiert und eingebunden werden. Die Rückgabewerte der Funktionen sind darauf ausgerichtet, den nativen MySQL-Funktionen so nah wie möglich zu kommen. Die bisherigen Befehle wie z. B. mysql_query() können dann weiter verwendet werden und werden im Hintergrund funktional adaptiert.

Sie sollten aber nicht vergessen, dass sich vom Funktionsumfang bei PDO und mysqli einiges getan hat, wie der Vergleich hier zeigt und sich der Umstieg daher lohnt.

Ersatz für ereg-Befehle

PHP 7 kennt keine POSIX Regex-Funktionen wie ereg() mehr. Alternativ können PCRE, also preg*-Befehle, für die vollständige Unterstützung regulärer Ausdrücke oder fnmatch(), für einfacheren shellartigen Platzhalter-Mustervergleiche, genutzt werden. Die Unterschiede beim Wechsel vom ereg zu preg werden hier übersichtlich erklärt.

Wie schon bei MySQL kann auch hier ein Wrapper, ereg-extension-wrapper genannt, genutzt werden. Es muss nur der Wrapper ereg-wrapper.php in das eigene Projekt kopiert und eingebunden werden. So können Sie weiterhin die POSIX Regex-Funktionen nutzen und preg*-Befehle werden im Hintergrund ausgeführt.

Generell empfehlen wir Ihnen die Anpassung der Funktionen bei noch weiterzuentwickelnden Projekten.

Nachfolgende Schritte

Haben Sie alle Applikationen Ihrer Seite aktualisiert, können Sie im Kundenmenü die PHP-Version ändern (Details zur PHP-Versionswahl in den FAQ). 

Nach umfangreichen Änderungen empfehlen wir Ihnen die Logdatei von PHP zu beobachten. Denken Sie daran, dass Sie einstellen können, welche Fehler angezeigt werden sollen. Alle Einstellungen können Sie über den PHP.INI-Editor im Kundenmenü anpassen (Infos dazu finden Sie in unseren FAQ).

Wir empfehlen Ihnen, zur Sicherheit Ihrer Website, Ihre eingesetzten Applikationen stets aktuell zu halten. In der Regel sind dann zukünftig Aktualisierungen in kleineren Versions-Schritten wesentlich einfacher durchzuführen.

Besuchen Sie unser Forum

Sie finden diesen Artikel auch in unserem Supportforum. Dort haben Sie die Möglichkeit sich mit anderen Kunden auszutauschen und hilfreiche Tipps von unseren Moderatoren zu erhalten.

Sollten Sie spezielle Rückfragen haben oder individuelle Hilfe bei der Umstellung benötigen, wenden Sie sich bitte an unseren Kundenservice: 

Per E-Mail: support@df.eu

Telefonisch: 089 998 288 026 oder 0800 181 18 75 (kostenfrei, nicht vom Mobilfunknetz erreichbar), Mo - Fr: 7 - 22 Uhr, Sa - So: 9 - 17 Uhr

 

Der Autor:


Nils ist von Anbeginn der DomainFactory dabei und arbeitet seit 2003 für das Unternehmen. Als studierter Wirtschaftsinformatiker kümmert er sich um die Betreuung der Kunden im Forum und schreibt technische Beiträge für den Blog. In seiner Freizeit beschäftigt er sich gerne offline mit seinen beiden kleinen Kinder oder treibt Sport, vornehmlich in der Gruppe, aber ohne Bälle.