PHP aktualisieren (Debian/Ubuntu)#
Neue PHP-Versionen bringen Sicherheitsfixes, bessere Performance und neue Funktionen. Gleichzeitig setzt i-doit bestimmte PHP-Versionen voraus — prüfe vor dem Update immer die Systemvoraussetzungen, welche Versionen aktuell unterstützt werden.
Dieser Artikel beschreibt den Wechsel von einer PHP-Version auf eine neuere unter Debian und Ubuntu — mit den offiziellen Paketquellen, ohne Drittanbieter-Repositories.
Backup zuerst
Erstelle vor dem PHP-Update ein vollständiges Backup — mindestens der Apache-Konfiguration (/etc/apache2/), der PHP-Konfiguration (/etc/php/) und deiner i-doit-Installation.
Kurzanleitung (TL;DR)#
Am Beispiel eines Wechsels von PHP 8.2 auf PHP 8.3 mit PHP-FPM:
- Backup erstellen
- Neue Pakete installieren:
1sudo apt install libapache2-mod-fcgid php8.3-{bcmath,cli,common,curl,fpm,gd,imagick,ldap,mbstring,memcached,mysql,pgsql,soap,xml,zip} - PHP-FPM starten und aktivieren:
1sudo systemctl enable --now php8.3-fpm - i-doit PHP-Konfiguration für die neue Version erstellen:
1sudo nano /etc/php/8.3/mods-available/i-doit.inii-doit.ini 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
allow_url_fopen = Yes file_uploads = On max_execution_time = 300 max_file_uploads = 42 max_input_time = 60 max_input_vars = 10000 memory_limit = 256M post_max_size = 128M register_argc_argv = On short_open_tag = On upload_max_filesize = 128M display_errors = Off display_startup_errors = Off error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT log_errors = On default_charset = "UTF-8" default_socket_timeout = 60 date.timezone = Europe/Berlin session.gc_maxlifetime = 604800 session.cookie_lifetime = 0 mysqli.default_socket = /var/lib/mysql/mysql.sock1sudo phpenmod -v 8.3 i-doit - Apache VirtualHost auf die neue PHP-Version umstellen — den Socket-Pfad in
/etc/apache2/sites-available/i-doit.confanpassen:1SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/" - Apache-Module aktivieren und Dienste neu starten:
1 2
sudo a2enmod proxy_fcgi setenvif rewrite sudo systemctl restart php8.3-fpm apache2 - i-doit-Cache leeren unter Verwaltung → Systemreparatur und Bereinigung
Welche PHP-Version liefert meine Distribution?#
Du kannst nur die PHP-Version installieren, die deine Distribution in ihren offiziellen Repositories anbietet. Für eine neuere Version müsstest du die Distribution selbst upgraden.
| Distribution | PHP-Version |
|---|---|
| Debian 12 "Bookworm" | PHP 8.2 |
| Ubuntu 22.04 LTS "Jammy" | PHP 8.1 |
| Ubuntu 24.04 LTS "Noble" | PHP 8.3 |
Prüfe, welche Version verfügbar ist:
1 | |
Vorbereitungen#
1. System aktualisieren#
1 | |
2. Aktuelle PHP-Version ermitteln#
1 2 3 4 5 6 7 8 | |
3. Apache-Integrationsmethode prüfen#
Es gibt zwei Wege, wie Apache PHP-Dateien verarbeitet:
| Methode | Beschreibung | Empfehlung |
|---|---|---|
| mod_php | PHP läuft direkt im Apache-Prozess. Einfach, aber weniger performant. Erfordert mpm_prefork. | Für kleine Installationen |
| PHP-FPM | PHP läuft als eigener Dienst. Apache leitet Anfragen über einen Socket weiter. Erlaubt mpm_event. | Empfohlen für Produktion |
Welche Methode aktuell aktiv ist:
1 2 3 4 5 | |
PHP-Pakete installieren#
Installiere die Pakete für die neue Version. Im folgenden Beispiel wird PHP 8.2 durch PHP 8.3 ersetzt — passe die Versionsnummern an deine Situation an.
1 | |
Falls du mod_php statt PHP-FPM verwendest, installiere zusätzlich:
1 | |
PHP-Konfiguration migrieren#
Nicht die alte php.ini kopieren
Jede PHP-Version kann geänderte oder entfernte Direktiven haben. Übertrage deine Anpassungen manuell in die neue Konfiguration.
i-doit Konfiguration erstellen#
Der sauberste Weg: Erstelle eine eigene .ini-Datei mit den i-doit-spezifischen Einstellungen:
1 | |
| i-doit.ini | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Aktiviere die Konfiguration für alle SAPIs (CLI und FPM):
1 | |
Die vollständigen Einstellungen findest du unter Systemeinstellungen.
Wo liegen die php.ini-Dateien?#
| SAPI | Pfad |
|---|---|
| CLI | /etc/php/8.3/cli/php.ini |
| Apache (mod_php) | /etc/php/8.3/apache2/php.ini |
| PHP-FPM | /etc/php/8.3/fpm/php.ini |
Apache konfigurieren#
Variante A: PHP-FPM (empfohlen)#
1. Sicherstellen, dass mod_php deaktiviert ist:
1 2 | |
2. Apache-Module für FPM aktivieren:
1 | |
3. MPM auf event umstellen (bessere Performance als prefork):
1 2 | |
4. VirtualHost anpassen:
Ändere den Socket-Pfad in /etc/apache2/sites-available/i-doit.conf:
| /etc/apache2/sites-available/i-doit.conf | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Socket-Pfad prüfen
Der Pfad /run/php/php8.3-fpm.sock muss mit der listen-Direktive in /etc/php/8.3/fpm/pool.d/www.conf übereinstimmen. Ein Mismatch ist die häufigste Fehlerursache.
5. PHP-FPM und Apache neu starten:
1 | |
Variante B: mod_php#
1. Alte Version deaktivieren, neue aktivieren:
1 2 | |
2. MPM auf prefork (mod_php erfordert dies):
1 2 | |
3. Apache neu starten:
1 | |
Installation prüfen#
PHP-Version verifizieren#
1 2 3 4 5 | |
i-doit prüfen#
- Öffne i-doit im Browser und prüfe ob alles funktioniert
- Gehe zu Verwaltung → Systemreparatur und Bereinigung und leere den Cache
- Prüfe die Systemübersicht unter Verwaltung → Systemübersicht — dort siehst du die aktive PHP-Version
Alte PHP-Version entfernen#
Wenn alles funktioniert, entferne die alte Version:
1 2 | |
Vorsicht
Prüfe vor dem Entfernen, dass kein anderer Dienst auf dem Server die alte PHP-Version benötigt.
Häufige Probleme#
HTTP 500 Internal Server Error#
- Logs prüfen:
tail -50 /var/log/apache2/error.logundjournalctl -u php8.3-fpm - Socket-Mismatch: Der häufigste Fehler — der Pfad im VirtualHost stimmt nicht mit der FPM-Konfiguration überein
- Fehlende Module:
php -mzeigt, welche Module geladen sind. Vergleiche mit den Systemvoraussetzungen - Dateiberechtigungen:
www-databraucht Lesezugriff auf die PHP-Dateien - Konfigurationsfehler:
apache2ctl configtestprüft die Apache-Syntax
PHP-Code wird als Text angezeigt#
Apache leitet die .php-Dateien nicht an den PHP-Interpreter weiter:
- Bei PHP-FPM: Fehlt der
<FilesMatch>Block im VirtualHost? - Läuft der FPM-Dienst?
systemctl status php8.3-fpm - Ist mod_php und FPM gleichzeitig aktiv? Das führt zu Konflikten — deaktiviere mod_php.
Fehlermeldungen über fehlende Erweiterungen#
Prüfe die geladenen Module und vergleiche mit den benötigten:
1 | |
Fehlende Module nachinstallieren:
1 | |
Änderungen an php.ini wirken nicht#
- Falsche Datei bearbeitet? CLI, FPM und mod_php haben jeweils eigene php.ini-Dateien
- Dienst nicht neu gestartet? Nach Änderungen an der FPM-Konfiguration:
sudo systemctl restart php8.3-fpm - Eigene .ini überschrieben? Prüfe mit
php --iniwelche Dateien geladen werden und in welcher Reihenfolge