Blog Umstellung auf PHP8 – die häufigsten Fehlerquellen und Probleme

Umstellung auf PHP8 – die häufigsten Fehlerquellen und Probleme

Der PHP Release Cycle definiert mit viel Vorlauf, wann welche PHP-Versionen offiziell nicht mehr unterstützt werden und keine Sicherheitsupdates mehr erhalten. Spätestens dann ist der Punkt gekommen, an dem man für die eigene Website die genutzte PHP-Version umstellen sollte. Ende 2022 war das Ende von PHP7 – insbesondere das Ende von PHP 7.4 – gekommen und eine Umstellung auf mindestens PHP8.0 nötig. Eigentlich sogar bereits auf PHP8.1, da auch PHP8.0 bereits auslaufend ist. Wir beschränken uns hier jedoch auf die Betrachtungen zu PHP8.0.

Im Rahmen unserer Arbeit haben wir in den vergangenen Monaten hunderte von WordPress-Websites auf PHP8 umgestellt. Zum einen natürlich die Websites, die sich bei uns in der Wartung befinden. Dies geschieht im Rahmen unseres Wartungsauftrags automatisch. Zusätzlich haben wir viele weitere Websites auf Kundenwunsch umgestellt. Unsere Erkenntnisse und Learnings haben wir in diesem Artikel zusammengefasst.

Zuerst einmal ist festzustellen, dass die Umstellung auf aktuellere PHP-Versionen selten proaktiv von den Website-Betreibern selbst durchgeführt wird. In der Regel führen wir als Dienstleister das Update dann im Rahmen der Wartung durch. Im Vergleich zu früheren Versionensprüngen (zum Beispiel 5.6 auf 7) sind die Hosting-Anbieter aber mittlerweile auch aufgewacht und fordern Kunden aktiv zum Wechsel der PHP-Version auf. Etwas über das Ziel hinaus geschossen ist dabei HostEurope im vergangenen Dezember, denn dort wurden nach mehrfacher Aufforderung an den Kunden alle Websites automatisch auf PHP8 umgestellt, sofern der Kunde sich nicht vorher aktiv selbst darum gekümmert hat. PHP7 ist dort seit dieser Umstellung nicht mehr verfügbar, es besteht ausschließlich die Auswahl zwischen PHP8.0 und PHP8.1.

Unter der Berücksichtigung, dass sehr viele Kunden keine Kenntnis davon haben, was PHP ist und ob dies für sie wichtig ist, führte dieser recht vehemente Schritt dazu, dass sich diverse Website-Betreiber bei uns gemeldet haben und plötzlich vor einer weißen Website standen, da die Applikation nicht kompatibel mit PHP8 war. Teilweise hat dies sogar zu Hosting-Umzügen geführt, um dann eine gezielte Migration der Applikation/Website durchführen zu können. Leider ist noch viel zu vielen Website-Betreibern vollkommen unklar, dass sie sich hier frühzeitig und regelmäßig kümmern müssen.

Andere Anbieter, darunter zum Beispiel Ionos, bieten PHP7.x-Versionen nur noch gegen kostenpflichtigen Aufpreis als „Extended Support“ an. Aufgrund der Ankündigungs-Mail mit der „Androhung“ von Mehrkosten, haben viele ahnungslose Website-Betreiber die PHP-Version bei Ionos „sicherheitshalber“ auf PHP8 umgestellt und standen dann, ähnlich wie die Kunden bei HostEurope, plötzlich vor einer weißen Seite. Auch in diesen Fällen konnten wir in den letzten Monaten vielfach helfen und unterstützen.

PHP-Fehler suchen und finden

Die wichtigste Maßnahme vor einer PHP-Versionsumstellung ist immer die Prüfung der eigenen Website auf Aktualität aller Komponenten. Nutzt die Website nur Plugins und Themes, die von den Entwicklern aktiv gepflegt werden und sind diese auf dem aktuellsten Versionsstand, ist die Wahrscheinlichkeit hoch, dass eine Umstellung der PHP-Version keine oder nur wenige Probleme macht. Sind hingegen veraltete Plugins und Themes im Einsatz, für die es bereits länger kein Update mehr gab oder sind diese Updates ggf. bislang nicht eingespielt worden (zum Beispiel mangels Lizenz bei kostenpflichtigen Komponenten), kann dies schnell zu PHP-Problemen führen.

Deswegen gilt als erster Rat für eine PHP-Umstellung: zuerst alle beteiligten Komponenten auf Aktualität prüfen und hier ggf. direkt nachbessern (Updates einspielen, fehlende Lizenzen erwerben, veraltete und nicht mehr aktualisierte Plugins/Themes entfernen und ersetzen).

Anders sieht dies bei Individualprogrammierung aus: wer individuell programmierte Themes und Plugins nutzt, kann in der Regel nicht auf allgemein verfügbare Updates durch den Entwickler zurückgreifen, sondern muss diesen Code manuell prüfen und anpassen lassen. Hier hilft ein Blick in den Code, um eventuelle Baustellen frühzeitig und vor der PHP-Umstellung zu identifizieren und die nötige Migration des Codes mit ausreichend Vorlauf zu planen.

Sind diese Grundlagen gelegt, führen wir die Website in der Regel auf der gewünschten PHP-Version aus (PHP 8.0 oder 8.1) und prüfen die Funktionstüchtigkeit im Frontend und Backend. Gleichzeitig kontrollieren wir das PHP-Errorlog auf Fehlermeldungen und Warnungen. Daraus leiten wir dann die notwendigen Schritte zur Korrektur ab.

Hier gilt natürlich: im Idealfall erfolgt diese Umstellung und Prüfung auf einem Testsystem, entweder als lokale Kopie oder in einem Test-/Staging-System direkt in der Hosting-Umgebung. So wird die Live-Website nicht unnötig und unplanbar lange lahmgelegt. Denn ob Fehler schnell beseitigt werden können oder ob es zu einer größeren Migration kommt, kann vorab selten beurteilt werden.

Wichtig: befindet sich der auftretende PHP-Fehler in einem Plugin oder Theme aus dem offiziellen Repository (und ist kein Update o. ä. verfügbar), ist es nicht ratsam, den Fehler dort im Code selbst zu beheben und damit das offizielle Plugin anzupassen. Dies kann zu Testzwecken erfolgen, eine dauerhafte Lösung kann dies jedoch nicht sein. Generell sollten aus Sicherheitsgründen niemals offiziell verfügbare Plugins oder Themes individuell angepasst werden. Weder für eigene Anpassungswünsche, noch zur Fehlerbehebung. In einem solchen Fall sollte man sich immer an den Autor der Komponente wenden, um eine offizielle Behebung des Problems zu erreichen. Ist dies nicht möglich, ist es vermutlich sowieso besser, die veraltete und nicht mehr gut betreute Komponente aus der eigenen Website zu entfernen.

Die häufigsten Code-Fehler bei PHP8-Umstellungen

Im Rahmen unserer Umstellungen haben wir immer wieder die gleichen Code-Fehler in Plugins und Themes gefunden. Diese sind meist sehr leicht zu korrigieren (aber mit Vorsicht zu genießen, siehe oben!).

Zugriffssyntax für Array- und String-Offsets mit geschweiften Klammern

Der Zugriff auf Array- und String-Offsets ist mit PHP8 nicht mehr mit geschweiften Klammern möglich:

Falsch:

array{0}

Richtig/Neu:

array[0]

Siehe auch: https://wiki.php.net/rfc/deprecate_curly_braces_array_access

Hooks mit create_function für anonyme Funktionen

Die Nutzung des Befehls create_function ist mit PHP8 nicht mehr möglich.

Falsch:

add_action( 'widgets_init', create_function( '', 'return register_widget( "FeaturedPageWidget" );' ) );

Richtig/Neu:

add_action( 'widgets_init', function () { return register_widget( "FaturedPageWidget" ); } );

Siehe auch: https://www.php.net/manual/en/function.create-function.php

Fehlerhafte WP_Widget-Registrierung

Die Nutzung des Konstruktors in Klassen hat sich geändert.

Falsch:

class meineklasse extends WP_Widget {
    function meineklasse() {
        WP_Widget::construct(...);
    }
}

Richtig/Neu:

class meineklasse extends WP_Widget {
    function __construct() {
        parent::__construct(...);
    }
}

Siehe dazu auch: https://developer.wordpress.org/reference/functions/register_widget/#comment-content-585

Fehlende Anführungszeichen bei Array-Index-Zeichenkettenliteral

Eigentlich keine Besonderheit und lange bekannt, wurde hier bislang in PHP7 nur eine Warnung geworden, ab PHP8 ist es ein Fehler.

Falsch:

array[test]

Richtig/Neu:

array["test"] oder array['test']

Siehe dazu auch: https://www.php.net/manual/de/language.types.array.php#language.types.array.donts

Fazit

Dies ist natürlich nur ein kleiner Ausschnitt an Problemen, auf die man im Rahmen einer Umstellung auf PHP8 bei einer WordPress-Website stoßen kann. Und sicherlich gibt es einige Dinge mehr, die mit PHP8 deprecated wurden, abgeschaltet wurden oder als neue Funktion hinzukamen. In der täglichen Arbeit waren die oben genannten Fehler und Probleme jedoch die Hauptpunkte, die wir bei hunderten von Websites prüfen bzw. anpassen mussten.

Wer sich für die grundsätzlichen Änderungen und Neuerungen in PHP8.0 gegenüber PHP7 interessiert, findet weitere Informationen dazu zum Beispiel bei PHP.Watch.

Und wer bislang die eigene Website noch nicht auf PHP 8 umgestellt hat, sei gewarnt: bereits am 26. November 2023 (also in exakt 6 Monaten), ist bereits PHP8.0 Geschichte und die Umstellung auf mindestens PHP 8.1 sollte abgeschlossen sein. Für unsere Wartungskunden starten wir mit den Umstellungen dazu in diesem Sommer, damit wir pünktlich zum Ende des Jahres alle Websites migriert haben.

Kennt ihr weitere „typische“ Fehler und Probleme bei der PHP8-Umstellung? Wir freuen uns über weitere Anregungen und Hinweise in den Kommentaren.

Brauchen Sie Hilfe bei der PHP-Umstellung?

Wir sind genau auf diese technischen Herausforderungen spezialisiert.

1 Gedanke zu „Umstellung auf PHP8 – die häufigsten Fehlerquellen und Probleme“

Schreibe einen Kommentar