PHP 7.4 – mehrere Versionen mit Apache (Ubuntu php-fpm 7.3 und 7.4)

Kein Kommentar Autor: Jürgen (jdo)

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.
Nextcloud 17 mag nicht mit PHP 7.4

Nextcloud 17 mag nicht mit PHP 7.4

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.

PHP 7.4 FPM/astCGI via Virtual Host steuern

PHP 7.4 FPM/astCGI via Virtual Host steuern

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.

PHP 7.4 FPM/FastCGI läuft

PHP 7.4 FPM/FastCGI läuft

Projekte, die damit noch nicht kompatibel sind, nutzen weiterhin Version 7.3.

Apache-Version
Bei mir läuft Apache 2.4.41 und damit hat die Sache problemlos funktioniert.

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.

.htaccess
Verwendest Du .htaccess, muss AllowOverride in der Apache-Konfiguration aktiv sein. Benutzt Du WordPress oder Nextcloud, sollte das sowieso der Fall sein. Ich wollte es nur erwähnen.

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.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.