Blog durchsuchen

PHP 7.4 - Wann lohnt sich das Update?

extendedLogo

PHP ist die wohl am meisten verwendete Programmiersprache bei der Erstellung von dynamischen Websites und Webanwendungen - 2019 wurde sie auf knapp 80% aller Websites als serverseitige Programmiersprache verwendet. Für maxcluster-Kunden steht seit einigen Wochen PHP 7.4 auf den Clustern zur Verfügung. Welche Features bringt die neue Version mit sich, welche Vorteile ergeben sich daraus und wann ist ein Wechsel auf PHP 7.4 für Onlineshop-Betreiber sinnvoll. Diesen Fragen gehen wir in unserem Beitrag nach.

PHP 7.4 | Neue Features und Verbesserungen

Die neue Version PHP 7.4 wurde Ende November vergangenen Jahres veröffentlicht und ist die letzte Nebenversion vor dem Release von PHP 8. Die neueste Version der Skriptsprache bringt eine Vielzahl neuer Funktionen mit, deren Ziel es ist, die Geschwindigkeit des Codes zu steigern und dessen Entwicklung zu vereinfachen. Die neuen Feature ermöglichen zudem lesbareren Code zu schreiben.

Performance-Verbesserung

Phoronix hat auch PHP 7.4 im Vergleich zu den Vorgänger-Versionen ausgiebig getestet. Von Version 7.3 zu 7.4 sind zwar keine signifikanten Leistungssteigerungen erkennbar, aber das stetige Ansteigen von Performance in den Versionen ist auch in diesem Fall zu verzeichnen.

PHP-Benchmark von Phoronix. Quelle: phoronix.com, 2019

PHP-Benchmark von Phoronix. Quelle: phoronix.com, 2019

Alles in allem bietet auch dieses PHP-Upgrade Vorteile für die Performance von Onlineshops. Durch die Verkürzung von Ladezeiten können Conversions gesteigert werden.

Weak References

Weak References erlauben es, Objekte zu erstellen, welche bei Bedarf vom Garbage Collector wieder entfernt werden können.

Beispiel:

$o1 = new MyClass;

$r1 = new WeakRef($o1);

if ($r1->valid()) {

    var_dump($r1->get());
}

unset($o1);

if ($r1->valid()) {
    var_dump($r1->get());
}


Quelle: https://www.php.net/manual/en/class.weakreference.php

Diese Funktion ist sinnvoll, wenn man Daten cachen möchte, man diese allerdings bei Bedarf aus dem Speicher entfernen kann, wenn der Garbage Collector Speicher freigeben muss. Mit der valid()-Methode kann geprüft werden, ob die Daten noch im Speicher vorhanden sind oder diese neu berechnet beziehungsweise von einem Sekundärspeicher geladen werden müssen. Vorteil dieser neuen Funktion ist, dass man ohne zusätzliche Dienste eine Cache-Struktur bauen kann, die bei Bedarf Arbeitsspeicher wieder freigibt.

Preloading Funktion

Mit der Einführung der sogenannten Preloading Funktion ist es möglich, den PHP Opcache bereits beim Starten von PHP zu füllen, ohne das die entsprechenden PHP-Dateien erst ausgeführt werden müssen. Dazu wird mit opcache.preload eine neue Direktive eingebaut, die es erlaubt ein PHP-Skript anzugeben, das beim Start von PHP ausgeführt wird und den OPcache durch includes oder opcache_compile_file füllt. Auf diese Weise geladene PHP-Klassen bleiben bis zu einem Neustart von PHP im OPcache erhalten. Dies bedeutet im Gegenzug, das Änderungen an den PHP-Dateien keine Auswirkungen haben bis PHP neugestartet wurde. Durch die neue Preloading Funktion wird die Geschwindigkeit von PHP beim Starten deutlich verbessert. Details dazu gibt es auch im RFC unter https://wiki.php.net/rfc/preload.

Wie hier im Beispiel gezeigt, wird der OPcache durch die Datei a.php gefüllt. In diesem Fall wird die Datei b.php in den OPcache geladen:

php.ini:
opcache.preload="/var/www/share/a.php"

a.php:
<?php
opcache_compile_file("/var/www/share/b.php");


Wenn jedoch mehrere Anwendungen auf demselben PHP-Server ausgeführt werden, kann dies zu Seiteneffekten führen, da die Klassen jeweils global geladen werden. Sie sollten daher möglichen Seiteneffekten besondere Aufmerksamkeit schenken, wenn Sie diese Funktionalität verwenden.

Wie evaluieren aktuell noch, ob wir in Zukunft ein Interface für opcache.preload in unserem Managed Center zur Verfügung stellen. Sollten Sie diese Funktion bis dahin bei uns verwenden wollen, wenden Sie sich bitte an unseren Support: support@maxcluster.de.

FFIs

FFI (Foreign Function Interfaces) ist eine neue Erweiterung, die eine einfache Möglichkeit bietet, C-Funktionen aufzurufen, auf C-Variablen zuzugreifen und Datenstrukturen, die in C-Bibliotheken definiert sind, zu erstellen und aufzurufen. Standardmäßig steht diese Funktion nur für die Kommandozeile und für Preload Skripte zur Verfügung.

Beispiel:

<?php
// create FFI object, loading libc and exporting function printf()
$ffi = FFI::cdef(
    "int printf(const char *format, ...);", // reguläre C Deklaration
    "libc.so.6");
// Rufe die C Funktion "printf()" auf
$ffi->printf("Hello %s!\n", "world");


Quelle: https://wiki.php.net/rfc/ffi

Mit den FFIs ist es nun möglich, in reinem PHP Erweiterungen zu schreiben und auf externe C-Bibliotheken zugreifen.

Spread Operator

Diese Funktion - auch Argument Unpacking genannt, ist eine verkürzte Schreibweise um Paramter zu vereinen und wird mit PHP 7.4 auf Arrays erweitert. Dadurch kann sie als Alternative zu array_merge()` genutzt werden. Sie wird verwendet, indem man drei Punkte vor einem Array oder vor einer Traversable Instance vorangestellt.

Beispiel:

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]

function getArr() {
  return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; //['a', 'b', 'c']

$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']

function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$arr8 = [...arrGen()]; //[11, 12, 13, 14]


Quelle: https://wiki.php.net/rfc/spread_operator_for_array

Der Effekt ist ein wesentlich kürzerer und übersichtlicherer Code, der die Lesbarkeit von Skripten deutlich verbessert.

Typed properties

Mit PHP 7.4 ist es nun auch möglich, Variablen feste Typen zuzuweisen, wie man es bereits bei vielen anderen Programmiersprachen kennt.

Damit ist es möglich, kürzeren und performanteren Code zu schreiben, wie in diesem Beispiel:


class Example {
    // Alle Typen außer "void" and "callable" werden unterstützt
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;

    // Typen können auch auf statische Eigenschaften angewandt werden.
    public static iterable $staticProp;

    // Types können auch mit der "var" Schreibweise gesetzt werden.
    var bool $flag;

    // Standardwerte sind weiterhin möglich.
    public string $str = "foo";
    public ?string $nullableStr = null;

    // Wenn mehrere Variablen gleichzeitig deklariert werden, gilt der Typ für alle Variablen
    public float $x, $y;
}


Quelle: https://wiki.php.net/rfc/typed_properties_v2

Arrow Funktion 2.0

Anonyme Funktionen sind bisher in PHP sehr umständich, selbst wenn sie nur eine einfache Operation ausführen. Zum Teil ist dies auf eine große Menge an syntaktischem Boilerplate zurückzuführen und zum Teil auf die Notwendigkeit, verwendete Variablen manuell zu importieren. Dies macht Code, der einfache Closures verwendet, schwer lesbar und unverständlich. Die neue Arrow Schreibweise für anonyme Funktionen 2.0 bietet nun einen Kurzschreibesyntax für die Definition von Funktionen und macht so den Code aufgeräumter und leichter les- und pflegbar.

Beispiel:

$y = 1;

//vorher
$fn2 = function ($x) use ($y) {
    return $x + $y;
};

//neue Arrow-Schreibweise
$fn1 = fn($x) => $x + $y;


Quelle: https://wiki.php.net/rfc/arrow_functions_v2

PHP 7.4 | Was muss man vor dem Update beachten?

Um die Sicherheit und Stabilität Ihrer Anwendung zu erhöhen, empfehlen wir stets die aktuellste PHP-Version, umso mehr, da die Versionen PHP 5.3 bis PHP 7.1 keine offiziellen Security-Updates mehr erhalten. Auch PHP selbst unterstützt diesen Ansatz unter dem Motto "Keeping Current". Die Vorteile dieses Ansatzes: Sicherheitslücken werden geschlossen, das Leistungspotenzial erhöht, weniger Probleme beim Update sowie bei der Nutzung von Plugins und Erweiterungen und die Vorteile neuer Features können umgehend genutzt werden. Lesen Sie hierzu auch mehr in unserem Blogbeitrag "PHP 7.3 - wann macht ein Wechsel Sinn?"

Kompatibilität von PHP 7.4 mit gängigen Anwendungen

Bevor Sie Ihre PHP-Version aktualisieren, sollten Sie überprüfen, ob die neue Version vollständig mit allen Komponenten kompatibel ist. Die Tabelle zeigt, welche Anwendungen mit PHP 7.4 bereits kompatibel sind (Stand: Januar 2020):

ShopsystemKompatibilitätAnmerkungen
Magento 1Nicht kompatibel
Magento 2Nicht kompatibel
Shopware 5KompatibelAb Shopware 5.6.5
Shopware 6Nicht kompatibel
TYPO3KompatibelAb TYPO3 v10
WordPressKompatibelAb WordPress 5.3
DrupalKompatibelAb Drupal 8.9
OxidNicht kompatibel
Matomo (Piwik)KompatibelAb Matomo 3.12.0
WooCommerceKompatibelAb WooCommerce 3.8
xt:CommerceKompatibelAb xt:Commerce 6.2.x; 7.4.x→ Aktuell nur mit xt:Commerce FREE, da noch kein ionCube Loader zur Verfügung steht.

EOL und Roadmap aktueller PHP-Versionen 

Sollten Sie sich noch nicht für ein Update entscheiden können oder wollen, lohnt sich auch noch ein Blick auf die Roadmap der existierenden PHP-Versionen. Bereits Ende dieses Jahres läuft der offizielle Support für die Version 7.2 aus. 7.3 wird noch bis zum voraussichtlichen Release von Version 8.0 unterstützt. Neben den offiziellen Sicherheitsupdates erhalten PHP-Versionen ab 5.6 aktuell noch inoffizielle Security-Backports von Microsoft. Diese stehen auch auf unseren Clustern zur Verfügung, dennoch empfehlen wir, möglichst eine aktuelle PHP-Version einzusetzen.

VersionSecurity-Support
PHP 5.3Keine Security-Updates mehr
PHP 5.4Keine Security-Updates mehr
PHP 5.5Keine Security-Updates mehr
PHP 5.6Inoffizielle Security Backports
PHP 7.0Inoffizielle Security Backports
PHP 7.1Inoffizielle Security Backports
PHP 7.2Offizieller Security-Support bis 30.11.2020
PHP 7.3Offizieller Security-Support bis 06.12.2021
PHP 7.4Offizieller Security-Support bis 28.11.2022

PHP 7.4 | So gelingt das Update

PHP 7.4 bei maxcluster einrichten

Um unsere Kunden zu unterstützen, steht PHP 7.4 bei maxcluster bereits auf allen unseren Ubuntu 18.04-Clustern zur Verfügung. Um PHP 7.4 zu verwenden, genügt es, die Version für den vHosts zu aktivieren. Dieser Vorgang lässt sich wieder rückgängig machen, sollte die eingesetzte Anwendung Probleme mit der neuen Version haben. 

PHP 7.4 für einen vHost bei maxcluster aktivieren

Sollten Sie noch einen unserer älteren Debian-Cluster nutzen und PHP 7.4 verwenden wollen, prüfen wir gerne die Möglichkeit, auf einen Ubuntu 18.04-Cluster zu wechseln. Bitte kontaktieren Sie hierzu unseren Support. Unser Team unterstützt Sie gerne auch bei Fragen und Problemen via E-Mail an support@maxcluster.de oder telefonisch unter 05251/41 41 30.

PHP 7.4 individuell einrichten

Sollten Sie kein Managed Hosting verwenden, können Sie PHP selbst herunterladen. Die weitere Vorgehensweise ist vom verwendeten Betriebssystem abhängig:

Wechsel auf PHP 7.4

Folgende Schritte empfehlen wir ungeachtet Ihres Shop- bzw CMS-Systems:

  • Prüfen Sie die Kompatibilität Ihres Shop- bzw. CMS-Systems mit der Version
  • Erstellen Sie ein Backup
  • Richten Sie das Update erst auf einer Entwicklungsumgebung ein, sodass Sie Tests durchführen können
  • Testen Sie Plugins auf Kompatibilität
  • Installieren Sie nach erfolgreichem Test das Update in Ihrer Life-Umgebung

Magento 2: So gelingt das Update auf PHP 7.4

Aktuell ist noch keine Version von Magento 2 kompatibel mit PHP 7.4. Magento empfiehlt für die Version 2.3. die Nutzung von PHP 7.3. (Quelle: Magento DevDocs). Wir gehen jedoch davon aus, dass Magento 2 mittelfristig Unterstützung für PHP 7.4 liefern wird.

Magento 1: So gelingt das Update auf PHP 7.4

Zur Zeit ist keine Version von Magento 1 kompatibel mit PHP 7.4. Da Magento 1 im Juni 2020 EOL gehen wird, ist hier auch nicht mehr mit offiziellem Support zu rechnen. Der Magento-Fork OpenMage enthält allerdings Patches, die es erlauben Magento 1 mit PHP 7.4 zu betreiben.

Shopware 6: So gelingt das Update auf PHP 7

Shopware hat angekündigt, dass es kurzfristig Unterstützung für PHP 7.4 geben wird. Bis dahin empfehlen wir die Verwendung von PHP 7.3.

Shopware 5: So gelingt das Update auf PHP 7.4

Shopware hat mitgeteilt, dass es in der Version 5.6.5 Unterstützung für PHP 7.4 geben wird. Auch hier empfehlen wir die Verwendung von PHP 7.3 bis zum offiziellen Release dieser Version.

Wordpress: So gelingt das Update auf PHP 7.4

Um sicherzustellen, dass alle Themes und Plugins mit PHP 7.4 funktionieren, sollten Sie im Vorfeld alle Updates von Wordpress gemacht haben. "WordPress continues to encourage all users to run the latest and greatest versions of PHP. This includes PHP 7.4 upon its official release." (Quelle) - dies impliziert zwar, dass die aktuelle Version von WordPress 5.3 einwandfrei mit PHP 7.4 kompatibel ist, allerdings trifft dies nicht in jedem Fall auf die eingesetzten Themes und Plugins zu.

Typo3: So gelingt das Update auf PHP 7.4

BItte beachten Sie, dass nur die aktuelle Typo3-Version v10 mit PHP 7.4 kompatibel ist. Stellen Sie also sicher, dass Sie im Vorfeld Ihr CMS-System auf die aktuellste Version upgedatet haben und das alle verwendeten Plugins PHP 7.4 unterstützen, bevor Sie auf hierauf updaten.

PHP 7.4 und Profiler

Sowohl für Tideways als auch Blackfire und New Relic APM stehen bereits mit PHP 7.4 kompatible PHP-Module zur Verfügung. maxcluster-Kunden erhalten diese automatisch, wenn der entsprechende Profiler über unser Managed Center aktiviert wurde. In anderen Fällen ist es ggf. notwendig, das Plugin zu aktualisieren, um PHP 7.4-Unterstützung zu erhalten.

PHP 7.4 und ionCube

Mit ionCube und dem ionCube-Loader ist möglich, PHP-Code auszuführen, welcher mit ionCube obfusciert wurde. Für aktuellere Versionen von Shopware ist ein ionCube nicht mehr nötig, bei anderen Anwendungen oder Plugins ist dies allerdings teilweise der Fall. Eine ionCube-Loader-Version, die PHP 7.4 unterstützt, wird für Februar erwartet.

Fazit

Mit PHP 7.4 wurde die Performance erneut verbessert. Dazu kommen neue Code-Konstrukte, die es erlauben, kürzeren und besser strukturierten Code zu schreiben. Online-Shops können sich aus diesem Grund auf kürzere Lade- und Zugriffszeiten sowie eine verbesserte Leistungsfähigkeit freuen. Wir empfehlen daher einen Wechsel auf PHP 7.4, sobald Ihre Anwendung die Version unterstützt.

Obwohl PHP 7.4 die Leistung steigert und die Code-Lesbarkeit deutlich verbessert, wird PHP 8 der eigentliche Meilenstein für die PHP-Performance sein, da der Vorschlag zur Einbindung eines JIT-Compilers bereits genehmigt wurde. Hier wird, ähnlich wie bei der JAVA JVM, der PHP-Code vor der Ausführung in Byte Code compiliert, der dann im OPcache gespeichert wird. Hierdurch sind weitere starke Verbesserungen in der PHP-Performance zu erwarten.

Sie haben Fragen, Wünsche, Kritik, Anregungen oder wollen uns einfach mal Ihre Meinung zu unserem Blog mitteilen? Hier haben Sie Gelegenheit, direkt mit uns in Kontakt zu treten.

E-Mail senden