Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von speefak » 11.04.2022 15:10:01

Moin, ich habe ein paar Verständnisfragen zum Thema verschiedene PHP Versionen auf einem Server. Auf dem Server sind php7.3 php7.4 php8.0 php8.1 installiert. Nexcloud ist auf 8.1 noch nicht lauffähig auf 8.0.17 schon; 7.3 wird mit dem nächsten Update nicht mehr unterstützt. Soweit so gut.

Ich habe das suri Repo hinzugefügt und php aktualisiert - von 7.3 auf 8.1 - und nextcloud streikte. Dann habe ich php8.0 installiert und nach einigem Hin und Her wurde dann der Apache Server mit php 8.0 gestartet. Mit dem Paket / Dienst php<verion>-fpm wird die php Version als Dienst gestartet ( oder sehe ich das falsch ? ).

Ich wundere mich gerade nur über folgenden Sachverhalt : alle o.g. PHP Versionen sind mit den benötigten Modulen installiert. Einzig phpX.X-fpm ist nur für die Version 8.0 installiert.
PHP 8.1 kann nicht gestartet werden da php8.1-fpm nicht installiert ist. Warum sagt die php info von Apache es ist php8.0 geladen wenn ein php -v und php --ini auf der shell auf die Version 8.1 hinweisen. Dabei kann 8.1 gar nicht geladen sein oder laufen da php8.1-fpm fehlt, der Server meint es laufe php8.0 und nextcloud würde bei php8.1 einen Fehler anzeigen. Da Nexctcloud aber keine Fehler anzeigt muss eine php Version unterhalb von php8.1 laufen, lt. Apache phpinfo 8.0 und somit passt es alles ( NC läuft ja ). Jetzt frage ich mich nur warum php -v und php --ini version 8.1 anzeigen und von Version 8.0 nichts angezeigt wird.

Die einzelnen php Versionen werden doch über den Befehl a2enmod php<version> im Apache aktiviert. Benötigt man dazu das FPM Modul oder verwaltet Apache die verschieden PHP Versionen selbst ? Um mehrere Versionen parallel zu betreiben müssten dann über a2enmod einfach mehrere Versionen aktiviert werden ? Wenn z.B. 7.3 7.4 und 8.1 aktiviert sind und von der Webseite 7.3 und 7.4 Unterstützt werden 8.1 jedoch nicht, wählt die Webseite ( in dem Fall nextcloud ) automatisch die höchstmögliche, kompatible Version aus ?

Code: Alles auswählen

root@host:/home/user/apache2_content/html# php -v
PHP 8.1.4 (cli) (built: Mar 20 2022 16:51:10) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.4, Copyright (c), by Zend Technologies
root@host:/home/user/apache2_content/html# php --ini
Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File:         /etc/php/8.1/cli/php.ini
Scan for additional .ini files in: /etc/php/8.1/cli/conf.d
Additional .ini files parsed:      /etc/php/8.1/cli/conf.d/10-opcache.ini,
https://host/info.php :

Code: Alles auswählen

PHP Version 8.0.17
System 	Linux host 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
Build Date 	Mar 20 2022 17:07:16
Build System 	Linux
Server API 	FPM/FastCGI
Virtual Directory Support 	disabled
Configuration File (php.ini) Path 	/etc/php/8.0/fpm
Loaded Configuration File 	/etc/php/8.0/fpm/php.ini
Scan this dir for additional .ini files 	/etc/php/8.0/fpm/conf.d 
PS : was mir grad beim Posten auffällt : lt. php --ini ist die geladene Konfigdatei : "Loaded Configuration File: /etc/php/8.1/cli/php.ini" lt. phpinfo vom Apache allerdings /etc/php/8.0/fpm/php.ini . Als ich eine Cache Einstellung in der /etc/php8.0/cli/php.ini vornahm wurde diese übernommen. Wie kann das sein wenn /etc/php8.0/cli/php.ini weder lt. Apache Info noch lt. php --ini geladen wurde ? Ich bin da gerade ein wenig verwirrt :roll:

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von JTH » 11.04.2022 15:20:33

speefak hat geschrieben: ↑ zum Beitrag ↑
11.04.2022 15:10:01
Jetzt frage ich mich nur warum php -v und php --ini version 8.1 anzeigen und von Version 8.0 nichts angezeigt wird.
Hinter dem php in der Konsole steckt ein php*-cli-Paket, nicht das php*-fpm-. Wahrscheinlich hast du zwar php8.0-fpm installiert, aber auch php8.1-cli. Zum Nachschauen:

Code: Alles auswählen

apt list --installed 'php*'
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von speefak » 11.04.2022 15:29:11

Code: Alles auswählen

apt list --installed 'php*'
Auflistung... Fertig
php-apcu-bc/buster,now 1.0.5-14+0~20211115.22+debian10~1.gbpa00758 amd64  [Installiert,automatisch]
php-apcu/buster,now 5.1.21+4.0.11-7+0~20220117.31+debian10~1.gbp9a887a amd64  [installiert]
php-bcmath/buster,now 2:8.1+92+0~20220117.43+debian10~1.gbpe0d14e all  [installiert]
php-common/buster,now 2:92+0~20220117.43+debian10~1.gbpe0d14e all  [Installiert,automatisch]
php-imagick/buster,now 3.6.0-4+0~20220117.35+debian10~1.gbp149f82 amd64  [installiert]
php-json/buster,now 2:8.1+92+0~20220117.43+debian10~1.gbpe0d14e all  [Installiert,automatisch]
php-pear/buster,now 1:1.10.13+submodules+notgz+2022032202-2+0~20220330.37+debian10~1.gbpfd4c1d all  [Installiert,automatisch]
php-xml-svg/oldstable,now 1.1.0-2 all  [installiert]
php7.4-apcu-bc/buster,now 1.0.5-14+0~20211115.22+debian10~1.gbpa00758 amd64  [Installiert,automatisch]
php7.4-apcu/buster,now 5.1.21+4.0.11-7+0~20220117.31+debian10~1.gbp9a887a amd64  [Installiert,automatisch]
php7.4-cli/buster,now 7.4.28-1+0~20220217.59+debian10~1.gbp195dcd amd64  [Installiert,automatisch]
php7.4-common/buster,now 7.4.28-1+0~20220217.59+debian10~1.gbp195dcd amd64  [Installiert,automatisch]
php7.4-imagick/buster,now 3.6.0-4+0~20220117.35+debian10~1.gbp149f82 amd64  [installiert]
php7.4-json/buster,now 7.4.28-1+0~20220217.59+debian10~1.gbp195dcd amd64  [Installiert,automatisch]
php7.4-opcache/buster,now 7.4.28-1+0~20220217.59+debian10~1.gbp195dcd amd64  [Installiert,automatisch]
php7.4-phpdbg/buster,now 7.4.28-1+0~20220217.59+debian10~1.gbp195dcd amd64  [Installiert,automatisch]
php7.4-readline/buster,now 7.4.28-1+0~20220217.59+debian10~1.gbp195dcd amd64  [Installiert,automatisch]
php8.0-apcu/buster,now 5.1.21+4.0.11-7+0~20220117.31+debian10~1.gbp9a887a amd64  [installiert]
php8.0-bcmath/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-bz2/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-cli/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-common/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-curl/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-dev/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-fpm/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-gd/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-gmp/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-imagick/buster,now 3.6.0-4+0~20220117.35+debian10~1.gbp149f82 amd64  [installiert]
php8.0-intl/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-ldap/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-mbstring/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-mysql/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-opcache/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-pgsql/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-readline/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-soap/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-sqlite3/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-xml/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0-zip/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 amd64  [installiert]
php8.0/buster,now 8.0.17-1+0~20220320.31+debian10~1.gbp34e045 all  [installiert]
php8.1-apcu/buster,now 5.1.21+4.0.11-7+0~20220117.31+debian10~1.gbp9a887a amd64  [Installiert,automatisch]
php8.1-bcmath/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [Installiert,automatisch]
php8.1-cli/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [Installiert,automatisch]
php8.1-common/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [Installiert,automatisch]
php8.1-gmp/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [installiert]
php8.1-imagick/buster,now 3.6.0-4+0~20220117.35+debian10~1.gbp149f82 amd64  [installiert]
php8.1-opcache/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [Installiert,automatisch]
php8.1-phpdbg/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [Installiert,automatisch]
php8.1-readline/buster,now 8.1.4-1+0~20220320.14+debian10~1.gbp16e58c amd64  [Installiert,automatisch]
Gibt es fpr cli und fpm unterschiedliche Configs ? Ist CLI dann NUR für Ausführungen in der Shell und FPM für den Apache ? Ich blicke durch die Unterschiedlichen Configs nicht durch. Wie kann ich EINE Version ( in dem Fall die 8.0 ) für das gesamte System als Vorgabe festlegen ?

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von eggy » 11.04.2022 15:39:03

Code: Alles auswählen

ls /usr/bin/php -lah
dürfte auf /etc/alternatives/php zeigen,

Code: Alles auswählen

update-alternatives --list php
sollte dann ebenfalls die aktuell präferierte Version ausgeben. Mit --config bzw. mit --set kann man sie ändern. Details siehe manpage.

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von speefak » 11.04.2022 15:53:27

Code: Alles auswählen

root@host:/etc/php/8.0/cli# ls /usr/bin/php -lah
lrwxrwxrwx 1 root root 21 Apr 11 13:45 /usr/bin/php -> /etc/alternatives/php
root@host:/etc/php/8.0/cli# update-alternatives --list php
/usr/bin/php7.4
/usr/bin/php8.0
/usr/bin/php8.1
root@host:/etc/php/8.0/cli# 
Gilt das fürs CLI oder nur den Webserver oder beides ? Oder gibs da keine Trennung von CLI und Apache ? würde o.g. Ausgabe jetzt bedeuten eine Anwendung könnte zwischen den Versionen 7.4 8.0 und 8.1 Wählen, php --ini die aktuellste php Version anzeigen und eine Webseite/Anwedung hätte 7.4 als niedrigste Version zu Verfügung ?

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von eggy » 11.04.2022 16:13:30

speefak hat geschrieben: ↑ zum Beitrag ↑
11.04.2022 15:53:27
würde o.g. Ausgabe jetzt bedeuten eine Anwendung könnte zwischen den Versionen 7.4 8.0 und 8.1 Wählen
CLI: Du hast da drei Variaten liegen: /usr/bin/php7.4, /usr/bin/php8.0, /usr/bin/php8.1. In dem Moment wo jemand gezielt /usr/bin/php8.1 aufruft, wird 8.1 genutzt. Wenn Jemand php8.1 aufruft, wird es auch benutzt, weil im Suchpfad. Nur wenn jemand php aufruft, wird (weil im Suchpfad) /usr/bin/php aufgerufen, und da ein SymLink auf /etc/alternatives/php ist, wird dann /etc/alternatives/php genommen. Und da das (wegen update-alternatives) ebenfalls ein SymLink ist, die Variante, die dort eingestellt ist. Siehe auch "update-alternatives --display php".

Was der Webserver macht, ist dann wiederum ne andere Sache, hängt davon ab, wie und was configuriert ist.
Ich würde mal schauen, was an libapache2-mod-php* Paketen installiert ist, vermutlich fehlt da das 8.1er Paket.

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Verschiedene PHP Versionen auf einem Server - Verständnisfragen

Beitrag von speefak » 12.04.2022 12:15:42

Jetzt kommt langsam Licht ins Dunkel und die Zusammenhänge werden klar :wink:

libapache2-mod-php8.1 hatte ich extra nicht installiert bzw. wieder deinstalliert damit der Apache php8.1 nicht aktivieren kann ( ich wüsste auch gerade nicht wo ich das konfiguriere ).

Antworten