PHP 7.4 – mehrere Versionen mit Apache (Ubuntu php-fpm 7.3 und 7.4)
Auf meinem Server laufen mehrere Anwendungen, unter anderem meine Nextcloud, dieser Blog (WordPress) und auch Matomo / Piwik. PHP läuft als FPM/FastCGI. Nun wollte ich über das PPA von Ondřej Surý auf PHP 7.4 umstellen. Diese PHP-Version wird dort sowohl für Ubuntu 16.04 LTS Xenial als auch Ubuntu 18.04 Bionic angeboten.
sudo add-apt-repository ppa:ondrej/php && sudo apt update
Betreibst Du einen eigenen Linux-Server, muss ich Dir nicht weiter erklären, wie Du ein PPA benutzt und daraus eine Software installierst.
Da PHP 7.4 nachweislich ein gutes Stück schneller ist, wollte ich den Geschwindigkeitsvorteil natürlich nutzen.
Das Problem: Nicht alle können mit PHP 7.4
Das PPA brauche ich auf einem Ubuntu 16.04 für PHP 7.1, sonst laufen aktuelle Versionen der Nextcloud nicht. Wie Du Schritt-für-Schritt auf eine neuere PHP-Version aktualisierst, habe ich hier beschrieben.
Eine Umstellung auf php-fpm ist auch nicht schwer, weil Du einfach in Apache statt php7.x auf php7.x-fpm umstellst. Also bei PHP 7.3 würde das so aussehen:
sudo a2dismod php7.3 sudo a2dismod mpm_prefork sudo a2enmod mpm_event sudo a2enmod proxy_fcgi setenvif sudo a2enconf php7.3-fpm
Pass aber auf, dass Du damit eine neue php.ini benutzt, die Du entsprechend wieder anpassen musst:
sudo vi /etc/php/7.3/fpm/php.ini
Wie? Weißt Du ja selbst. Bei mir kommt der Ratschlag aus der Nextcloud-Doku Kapitel Server Tuning rein. In die php.ini füge ich also die nachfolgenden Zeilen ein:
opcache.enable=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1
Nun habe ich ganz forsch auf eine neue PHP-Version aktualisiert, also PHP 7.4. Das Ergebnis davon war:
- WordPress kann mit PHP 7.4 umgehen – keine Probleme (zumindest sind mir noch keine aufgefallen).
- Nextcloud 17 wirft eine Fehlermeldung aus, dass die maximal unterstützte Version PHP 7.3 ist – funktioniert also nicht mehr.
- Matomo schickt mir ein E-Mail, dass irgendwas bei der Archivierung auf die Fresse gefallen ist – tut also nicht mehr. Im Web findest Du schnell heraus, dass Du nicht alleine mit dem Problem bist.
- Nextcloud 18 (RC) klappt wunderbar – Software motzt nicht.
Aber zum Glück sind wir ja flexibel mit unserem Linux-Server.
Also splitten wir eben
Bekanntlich kannst Du auf einem System mehrere PHP-Versionen betreiben. Du vergibst in Apache einfach gewisse Direktiven. Das funktioniert auch mit FPM/FastCGI und es gibt mehrere Optionen. Per Standard ist bei mir weiterhin PHP 7.3 aktiv und sofern nicht anders angegeben, wird das benutzt.
Eine alternative PHP-Version darfst Du via Direktive im Virtual Host angeben oder auch die Datei .htaccess dafür benutzen.
PHP 7.4 FPM/FastCGI via Virtual Host
Persönlich habe ich mich für diese Variante entschieden. Die Datei .htaccess könnte durch Updates modifiziert werden und auch wenn die Direktive nicht überschrieben werden sollte, könnte es passieren. Auf den Virtual Host hat ein Upgrade weniger bis gar keinen Einfluss. Das funktioniert natürlich nur, wenn Du root-Zugriff auf den Server hast. Installierst Du aber eine zusätzliche PHP-Version, sollte auch der root-Zugriff kein Problem sei.
In meinem Virtual Host für bitblokes.de füge ich folgende Zeilen ein, um PHP 7.4 FPM/FastCGI zu benutzen.
<FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/" </FilesMatch>
Das sieht zum Beispiel so aus. Alternativ könntest Du angeben, was eben installierst ist. Möglicherweise setzen andere Programme andere Versionen voraus. Dann tauschst Du einfach in php7.2-fpm.sock oder was weiß ich.
Nun dürfen wir nicht vergessen, Apache die neue Konfiguration mitzuteilen.
sudo systemctl reload apache2
Reicht das nicht, versuche reload durch restart zu tauschen. Bitblokes.de läuft nun mit PHP 7.4 FPM/FastCGI.
Projekte, die damit noch nicht kompatibel sind, nutzen weiterhin Version 7.3.
Direktive in .htaccess einfügen
Mit genau der gleichen Syntax wie oben beschrieben, kannst Du die Direktive auch in der Datei .htaccess benutzen. Das eignet sich zum Beispiel dann, wenn Du zwar Zugriff auf die Datei .htaccess, nicht aber den Virtual Host hast.
Es kann ja gut sein, dass Du zwar ein Website-Projekt betreuen darfst, aber trotzdem keine Administrator-Rechte auf dem Server hast. Das ist gar nicht so abwegig. Allerdings muss Dir der Administrator des Servers mehrere PHP-Versionen zur Verfügung stellen. Natürlich muss er Dir auch mitteilen, was Deine Optionen sind.
Informationen abfragen
Wie Du abfragen kannst, welche PHP-Version Du benutzt, ist hinreichend bekannt. Der Vollständigkeit aber hier kurz erklärt.
Erstelle eine Datei, die zum Beispiel phpinfo.php heißt. Dort kopierst Du diesen Code hinein:
<?php phpinfo(); ?>
Speichere die Datei ab und kopiere sie auf Deinen Webserver. Nun kannst Du die Datei im Browser aufrufen und bekommst die gewünschten Informationen.