Projekt Linux-Webserver – Teil 4 – Installation mehrere PHP-Versionen

Projekt Linux-Webserver – Teil 4 – Installation mehrere PHP-Versionen

21. Juli 2026 | Server, Netzwerk und Hosting | 0 Kommentare

So installierst und nutzt du mit deinem Ubuntu-Webserver mehrere PHP-Versionen parallel. Ich zeige dir, wie ich das bei meinem Webserver-Projekt konfiguriert habe.

In diesem Teil geht es um die wichtigste Funktion des Webservers, nämlich die Verwendung von PHP.

Dieser Beitrag baut auf Teil 3 – Installation MariaDB und Freigaben auf.

Wir möchten gern, dass man mit unserem Apache-Webserver mehrere PHP-Versionen parallel nutzen kann. Dafür richten wir PHP nicht als Webservermodul ein, sondern als FPM-Dienst, was vom Webserver dann als Fast-CGI angesprochen wird. Das bedeutet also, dass alle installierten PHP-Versionen als Dienst laufen und wir ganz bequem über die .htaccess‑Datei die benötigte PHP-Version für das Webprojekt wählen können. Ähnlich, wie es auch bei vielen Webhostern möglich ist.

Warum mehrere PHP-Versionen?

PHP-Versionen sind nicht abwärtskompatibel: Ein WordPress-Plug-in, das für PHP 7.4 geschrieben wurde, kann unter PHP 8.3 Fehler erzeugen – und umgekehrt verlangt modernes Drupal PHP 8.2 oder höher. Auf einem eigenen Server kannst du mehrere PHP-Versionen parallel betreiben und jeder Webseite genau die Version zuweisen, die sie benötigt.

Was ist PHP-FPM?

PHP-FPM steht für FastCGI Process Manager. Es handelt sich um einen eigenständigen PHP-Prozess-Manager, der effizienter als das klassische mod_php ist. PHP-FPM läuft als separater Systemdienst und kommuniziert mit Apache über einen Unix-Socket. Jede PHP-Version hat ihren eigenen FPM-Dienst und Socket.

Befehl / OptionBedeutung
mod_php (alt)PHP lief direkt im Apache-Prozess. Nachteil: Nur eine Version möglich, alle Benutzer teilen denselben PHP-Prozess.
PHP-FPM (modern)PHP läuft als separater Dienst. Vorteil: Mehrere Versionen gleichzeitig, jede Webseite kann eigene PHP-Einstellungen haben, bessere Performance.
FastCGIProtokoll zur Kommunikation zwischen Webserver (Apache) und der PHP-Anwendung. Schneller als klassisches CGI.
Unix-SocketEine Datei (/run/php/php8.3-fpm.sock) die als Kommunikationskanal dient. Schneller als TCP/IP für lokale Verbindungen.

PHP-Paket-Quellen zufügen

In dem offiziellen Repository von Ubuntu ist leider nur eine PHP-Version verfügbar, und das auch nur als Server-Modul. Damit können wir unsere Funktionalität nicht realisieren.

Dazu müssen wir das beliebte und am weitesten verbreitete PPA (Personal Package Archive) für PHP unter Ubuntu und Debian zu unserem Repository hinzufügen. Das PPA wird von dem Debian-Entwickler Ondřej Surý betrieben und ermöglicht es, mehrere, aktuelle PHP-Versionen parallel auf einem System zu installieren und zu verwalten.

Mit folgendem Befehl fügen wir das Repository hinzu:

sudo add-apt-repository ppa:ondrej/php

Im Anschluss müssen wir alle Paket-Quellen neu einlesen:

sudo apt update

Zur Erläuterung:

Befehl / OptionBedeutung
add-apt-repositoryFügt eine externe Paket-Quelle (PPA) zu apt hinzu. Importiert automatisch den GPG‑Schlüssel für die Signaturprüfung.
ppa:ondrej/phpOndrej Surys PHP-PPA. Enthält PHP 5.6 bis PHP 8.5 für Ubuntu. Sehr verbreitet und gut gepflegt.
-yBeantwortet die Sicherheitsnachfrage automatisch mit Ja.

PHP-Version installieren

Jetzt können wir anfangen, die benötigten PHP-Versionen zu installieren. Aktuell sind die Versionen PHP 5.6, PHP 7.4, PHP 8.0, PHP 8.1, PHP 8.2, PHP 8.3, PHP 8.4 und PHP 8.5 erhältlich. Offiziell supportet werden nur noch PHP 8.2 aufwärts.

Mit den nachfolgenden Befehlen installieren wir die jeweilige PHP-Version und die benötigten PHP-Module. Ich liste dir hier alle gängigen Versionen auf, sodass du dir einfach den Befehl für die von dir gewünschte Version heraussuchen und kopieren kannst.

Für PHP 8.1:

sudo apt install php8.1 libapache2-mod-php8.1 php8.1-apcu php8.1-bcmath php8.1-curl php8.1-fpm php8.1-gd php8.1-imagick php8.1-intl php8.1-mbstring php8.1-xml php8.1-xsl php8.1-yaml php8.1-zip php8.1-bz2 php8.1-cli php8.1-mysql php8.1-opcache php8.1-readline php8.1-soap

Für PHP 8.2:

sudo apt install php8.2 libapache2-mod-php8.2 php8.2-apcu php8.2-bcmath php8.2-curl php8.2-fpm php8.2-gd php8.2-imagick php8.2-intl php8.2-mbstring php8.2-xml php8.2-xsl php8.2-yaml php8.2-zip php8.2-bz2 php8.2-cli php8.2-mysql php8.2-opcache php8.2-readline php8.2-soap

Für PHP 8.3:

sudo apt install php8.3 libapache2-mod-php8.3 php8.3-apcu php8.3-bcmath php8.3-curl php8.3-fpm php8.3-gd php8.3-imagick php8.3-intl php8.3-mbstring php8.3-xml php8.3-xsl php8.3-yaml php8.3-zip php8.3-bz2 php8.3-cli php8.3-mysql php8.3-opcache php8.3-readline php8.3-soap

Für PHP 8.4:

sudo apt install php8.4 libapache2-mod-php8.4 php8.4-apcu php8.4-bcmath php8.4-curl php8.4-fpm php8.4-gd php8.4-imagick php8.4-intl php8.4-mbstring php8.4-xml php8.4-xsl php8.4-yaml php8.4-zip php8.4-bz2 php8.4-cli php8.4-mysql php8.4-opcache php8.4-readline php8.4-soap

Wer die Version 8.5, 7.4 oder 5.6 haben möchte, kann sich die Modulnamen für die Installation selbst anpassen.

Zur Erläuterung:

Befehl/OptionBedeutung
php8.3-fpmDer PHP-FPM-Daemon für PHP 8.3. Läuft als separater Dienst auf dem System.
php8.3-cliPHP als Kommandozeilen-Tool. Nötig für Composer, Artisan (Laravel), WP-CLI usw.
php8.3-mysqlPDO- und MySQLi-Erweiterungen für die Datenbankverbindung. Ohne dieses Paket kann PHP nicht mit MariaDB kommunizieren!
php8.3-curlcURL-Erweiterung. Nötig für HTTP-Anfragen aus PHP heraus, z. B. API‑Aufrufe, Webhooks.
php8.3-gdGD-Grafikbibliothek. Nötig für Bildbearbeitung: Thumbnails erstellen, Wasserzeichen, Bildgroesse aendern.
php8.3-mbstringMultibyte-String-Funktionen. Pflicht für alle Anwendungen, die Unicode-Text (Umlaute, Emoji) verarbeiten.
php8.3-xmlXML-Verarbeitung und DOM-Manipulation. Nötig für viele Frameworks und Dateiimporte.
php8.3-zipZIP-Archiv-Unterstützung. Nötig z. B. für WordPress-Updates und Plugin-Installationen.
php8.3-intlInternationalisierung. Stellt Sprachformatierungen, Kollationen und Locale-Funktionen bereit.
php8.3-bcmathMathematik mit beliebiger Präzision. Nötig für Finanzberechnungen (Runden ohne Gleitkomma-Fehler).
php8.3-opcacheKompiliert PHP-Code in Bytecode und speichert ihn im RAM. Beschleunigt PHP um den Faktor 2-10x!

Jetzt lassen wir uns erst einmal alle geladenen Dienste anzeigen, um zu sehen, ob unsere installierten PHP‑FPM‑Versionen als Dienst schon laufen.

systemctl list-units --type=service --state=running

Alle installierten PHP-FPM-Versionen laufen schon als Dienste. Das ist schon mal gut.

Ubuntu aktive Systemdienste PHP-FPM Übersicht

PHP als FastCGI laden

Nach der Installation der ersten PHP-Version ist PHP als Modul geladen. Das wollen wir natürlich nicht, weshalb wir das jetzt erst mal ändern.

Als Erstes lassen wir uns zum Test eine PHP-Info-Datei im Browser ausgeben, um zu prüfen, ob PHP auch ausgegeben wird. Dazu legen wir uns in dem HTML-Verzeichnis eine info.php an. Da schreiben wir dann nur folgende Anweisung rein.

<?php phpinfo(); ?>

Jetzt können wir die Datei mit dem Browser einmal aufrufen:

PHP-Info-Ausgabe Apache Handler Test

Aus der Testseite sehen wir auch gleich, dass PHP als Server-Modul und nicht als FastCGI läuft. Das werden wir gleich ändern.

Wir aktivieren zum testen die PHP8.3-FPM-Konfiguration mit folgendem Befehl:

sudo a2enconf php8.3-fpm

Deaktivieren lassen sich im Apache diese Konfigurationen mit dem Apache-Befehl a2disconf, als sudo a2disconf php8.3-fpm.

Nun starten wir den Apache einmal neu:

sudo systemctl restart apache2

Danach laden wir die phpinfo in unserem Browser neu und sehen, dass jetzt bei Server-API nicht mehr „Apache 2.0 Handler“ sondern „FPM/FastCGI“ steht. Damit verwendet jetzt der Apache die FPM-Version.

PHP als Server-Modul deaktivieren

Wenn PHP als normales Server-Modul geladen wird, wird immer das Modul „mpm_prefork“ aktiviert und geladen. Wir benötigen aber das zudem performantere Modul „mpm_event“. Außerdem funktioniert HTTP2 nicht mit dem Prefork-Modul, weshalb wir das jetzt wechseln

Dazu lassen wir uns noch einmal alle geladenen Apache-Module ausgeben, um zu sehen, ob „mpm_prefork“ und PHP als Modul geladen sind. Wenn ja, deaktivieren wir diese beiden Module und aktivieren das Modul „mpm_event“.

Zuerst deaktivieren wir PHP8.3 als Servermodul. (Wenn du als Standard eine andere PHP-Version hast, nimmst du natürlich diese.)

sudo a2dismod php8.3

Dann deaktivieren wir das Modul „mpm_prefork“:

sudo a2dismod mpm_prefork

Anschließend aktivieren wir das Modul „mpm_event“:

sudo a2enmod mpm_event

Nun den Apache-Webserver einmal neu starten:

sudo systemctl restart apache2

Und abermals alle aktiven Module ausgeben und kontrollieren, dass jetzt die richtigen Module geladen sind.

apache2ctl -M

Jetzt sollte der Eintrag „mpm_event_module (shared)“ in der Liste auftauchen und die Einträge „mpm_prefork_module (shared)“ und „php_module (shared)“ sollten verschwunden sein.

PHP konfigurieren

Jede PHP-Version hat ihre eigene php.ini-Konfigurationsdatei mit den wichtigen Einstellungen für den Webserver-Betrieb. Damit die meisten PHP-Websysteme korrekt laufen, müssen wir noch ein paar Grundeinstellungen für PHP vornehmen. Das erfolgt über die Datei php.ini.

PHP.ini Datei für die PHP8.3-FPM-Version aufrufen:

sudo nano /etc/php/8.3/fpm/php.ini

Die PHP.ini für eine andere PHP-FPM-Version, findest du, indem du im Verzeichnis-Pfad zur php.ini die PHP Versionsnummer anpasst. Also: /etc/php/8.x/fpm/php.ini

Nur der Vollständigkeit halber, für unser Projekt nicht benötigt: PHP als Apache Modul hat ebenfalls eine eigene php.ini. Diese findest du unter /etc/php/8.3/apache2/php.ini

In der Datei suchst du folgende Parameter und passt diese dann wie folgt an. Anschließend speicherst du die Datei wieder und beendest den Editor.

max_execution_time = 240
max_input_vars = 5000
memory_limit = 256M
post_max_size = 40M
upload_max_filesize = 40M
session.gc_maxlifetime = 86400

Zum Schluss müssen wir den zugehörigen PHP-FPM-Dienst neu starten, damit unsere Einstellungen angewendet werden.

sudo service php8.3-fpm restart

PHP-Einstellungen im Webverzeichnis steuern.

An der Stelle gibt es eine wichtige Funktion der FPM-PHP. Du kannst für jedes Unterverzeichnis die PHP-Einstellungen separat anpassen und das unabhängig von der PHP-Version.

Dazu musst du nur die gewünschten PHP-Werte, die du ändern möchtest, in eine INI-Datei schreiben und diese Datei dann in das gewünschte Verzeichnis legen. Die Datei wirkt auf das Verzeichnis, in dem sie liegt, sowie automatisch auf alle darin enthaltenen Unterverzeichnisse.

Die Datei muss exakt „.user.ini“ heißen, damit das funktioniert. Der Punkt vorn ist dabei nicht zu übersehen. Änderungen werden von PHP nicht sofort eingelesen, daher kann das bis zu 300 Sekunden dauern.

PHP-Version über .htaccess steuern

Kommen wir jetzt dazu, die PHP-Version über die .htaccess auswählbar zu machen. Ich möchte, dass man einfach nachfolgende Anweisung ganz oben in die .htaccess einträgt:

AddType application/x-httpd-php84 .php

Als Erstes legen wir uns dafür eine neue Konfigurationsdatei an.

sudo nano /etc/apache2/conf-available/php-handlers.conf

Das nachfolgende Skript tragen wir in die Datei ein und speichern diese ab.

# PHP-Umschalter konfigurieren
###############################################

# PHP 8.1
AddType application/x-httpd-php81 .php
Action application/x-httpd-php81 /php81-handle

# PHP 8.2
AddType application/x-httpd-php82 .php
Action application/x-httpd-php82 /php82-handler

# PHP 8.3
AddType application/x-httpd-php83 .php
Action application/x-httpd-php83 /php83-handler

# PHP 8.4
AddType application/x-httpd-php84 .php
Action application/x-httpd-php84 /php84-handler


# FPM Mapping
###############################################

ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "%{DOCUMENT_ROOT}%{REQUEST_URI}"

<Location "/php81-handler">
    SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost/"
</Location>

<Location "/php82-handler">
    SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
</Location>

<Location "/php83-handler">
    SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
</Location>

<Location "/php84-handler">
    SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</Location>

Jetzt müssen wir unsere Konfigurationsdatei aktivieren:

sudo a2enconf php-handlers

Ganz wichtig: Damit sich die PHP-Version auch umschalten lässt, müssen wir die Konfigurationsdatei von PHP8.3-FPM, die wir vorhin zum Test geladen haben, wieder deaktivieren.

sudo a2disconf php8.3-fpm

Anschließend müssen wir die Apache-Konfiguration neu laden:

sudo systemctl reload apache2

Standard-PHP-Version festlegen

Natürlich müssen wir jetzt noch die Standard-PHP-Version festlegen. Das machen wir, indem wir die Virtual-Host-Datei, die wir im Teil Apache-Webserver schon bearbeitet haben, bearbeiten.

Default-Konfiguration:

nano /etc/apache2/sites-available/000-default.conf

SSL-Default-Konfiguration:

nano /etc/apache2/sites-available/default-ssl.conf

Dazu müssen wir folgende Anweisung jeweils an das Ende der Datei einfügen:

# Standard PHP-Version für diese Domain
AddType application/x-httpd-php83 .php
Action application/x-httpd-php83 /php83-handler

Zum Abschluss kannst du die korrekte Funktion testen. Dazu legst du einfach ein Verzeichnis bei deinem Webseiten-Verzeichnis an und kopierst dort die info.php hinein. Anschließend erstellst du eine .htaccess-Datei und fügst am Anfang folgende Anweisung ein.

AddType application/x-httpd-php84 .php

Jetzt rufst du die info.php aus diesem Unterverzeichnis im Browser auf und siehe da, in diesem Verzeichnis wird PHP 8.4 geladen. Damit funktioniert alles.

Abschluss mehrerer PHP-Versionen

An dieser Stelle sind wir mit der Konfiguration mehrerer PHP-Versionen fertig. Wir haben die PHP-Version und wichtige Module installiert, PHP-FPM konfiguriert und die Action für den Wechsel der PHP-Version angelegt und aktiviert.

Im nächsten Teil werden wir dann phpMyAdmin installieren und einrichten. Damit wir auch über den Browser auf unsere Datenbanken zugreifen können.

Weiter geht's mit Teil 5 – Installation PHPMyAdmin und HeidiSQL.

Wie hat dir dieser Beitrag gefallen?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Hier schreibt: Thomas

Hier schreibt: Thomas

Ich heiße Thomas und bin Inhaber einer Agentur für eCommerce und Online Marketing. Zusätzlich interessiere ich mich für CMS Systeme, Wordpress, Drupal, Grafik und Multimedia. Ihr findet mich auf Twitter und Facebook. Über einen Kommentar zu diesem Beitrag würde ich mich freuen.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Blog via E-Mail abonnieren

Gib Deine E-Mail-Adresse an, um diesen Blog zu abonnieren und Benachrichtigungen über neue Beiträge via E-Mail zu erhalten.

Schließe dich 2.594 anderen Abonnenten an

In eigener Sache

Mit einem Stern (*) markierten Links sind Affiliate-Links. Wenn du einen Kauf über diese Links tätigst, bekomme ich eine Provision und du unterstützt aktiv diesen Blog. Für dich ändert sich der Preis nicht.

Wichtig: Ich empfehle nur Produkte, die ich selbst verwende und/oder von denen ich überzeugt bin. Vielen Dank für deine Unterstützung!