Eine PHP-Version außerhalb des Supports läuft weiterhin einwandfrei und bekommt keine Sicherheitsfixes mehr. Nichts wirkt kaputt, und darum sitzen Websites jahrelang darauf - und darum ist eine alte PHP-Version eines der ersten Dinge, nach denen ein Angreifer sieht.

Zwei verschiedene Aktualisierungen

  • Patch-Releases - 8.3.10 auf 8.3.11. Nur Sicherheits- und Fehlerkorrekturen, keine Verhaltensänderung. Diese automatisch einspielen.
  • Große Versionen - 8.2 auf 8.3. Können veraltetes Verhalten entfernen, auf das Ihr Code baut. Die brauchen erst eine Prüfung.

Die Patch-Releases automatisieren

sudo apt-get install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
grep -A5 "Allowed-Origins" /etc/apt/apt.conf.d/50unattended-upgrades

Eine große Version ordentlich vorbereiten

  1. Herausfinden, was bricht - statischvendor/bin/rector process --dry-run oder phpcs --standard=PHPCompatibility --runtime-set testVersion 8.3
  2. Die neue Version neben der alten installieren — beide können da sein; allein der Pool entscheidet, welche läuft.
  3. Staging darauf richten und die Website durchspielen — Kasse, Uploads, Mail, die Cronjobs.
  4. Den Produktionspool umstellen, die alte Version installiert lassen — damit der Rückweg eine Zeile und ein Neuladen ist.
sudo apt-get install -y php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-curl php8.3-xml
# nginx
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
sudo nginx -t && sudo systemctl reload nginx

Dann prüfen, was geladen ist, nicht was installiert ist

php -v                       # the CLI version
curl -sSI https://yourdomain.com | grep -i x-powered-by
php -m | sort                # the modules the site actually has
Die CLI-Version und die Web-Version sind getrennt. Ein Cronjob kann auf PHP 8.1 laufen, während die Website auf 8.3 läuft, und der Unterschied zeigt sich als Fehler, der immer nur nachts auftritt.
Auf EGPHP-Hosting ist die Version ein Auswahlfeld, Patch-Releases werden für Sie eingespielt, und die vorherige Version bleibt verfügbar. Siehe Ihre PHP-Version aktualisieren.