de:multiphp

mehrere PHP-Versionen verwenden

Inhalt

Beginnend mit Version v1.7.4 unterstützt LiveConfig die Umschaltung zwischen verschiedenen PHP-Versionen pro Domain, wenn entsprechend mehrere PHP-Interpreter auf dem Server vorhanden sind.

Dieses Dokument beschreibt, wie Sie die zusätzlichen PHP-Interpreter in LiveConfig registrieren können.

Voraussetzungen

Voraussetzung ist, dass Sie die zusätzlichen PHP-Versionen bereits auf dem Server installiert haben. Idealerweise sollten diese jeweils in einem separaten Verzeichnisbaum installiert sein (z.B. /opt/php/php-5.5.14, /opt/php/php-5.6.0rc2 etc.). In der Regel müssen Sie PHP hierfür selbst compilieren - verwenden Sie dann das configure-Flag --prefix (z.B. --prefix=/opt/php/php-5.6.0rc2). Zudem ist wichtig, dass Sie PHP mit FastCGI-Unterstützung compilieren (PHP < 5.3: --enable-fastcgi).

Es genügt übrigens, die CGI- und optional die CLI-Varianten zu compilieren - ein Apache-Modul (--with-apxs2=…) benötigen Sie nicht, da verschiedene PHP-Versionen nur als (Fast)CGI-Programm parallel genutzt werden können.

Am Ende sollten Sie ein Programm namens php-cgi im jeweiligen Zielverzeichnis haben (z.B. /opt/php/php-5.5.14/bin/php-cgi).

Repositories für zusätzliche PHP-Versionen

Für einige Distributionen stellen wir fertig vorcompilierte Pakete bereit:

Distribution Plattform Version Datei Erweiterungen
Debian 8 (Jessie) AMD64 5.3.29 php-5.3-opt_5.3.29-1+jessie2_amd64.deb Suhosin 0.9.37.1
5.4.45 php-5.4-opt_5.4.45-1+jessie1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
ZendOpcache 7.0.5
5.5.38 php-5.5-opt_5.5.38-1+jessie1_amd64.deb Suhosin 0.9.38
5.6.39 php-5.6-opt_5.6.39-1+jessie1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
ImageMagick 3.4.3RC2
LDAP
Tidy
7.0.33 php-7.0-opt_7.0.33-1+jessie1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.1.25 php-7.1-opt_7.1.25-1+jessie1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.2.13 php-7.2-opt_7.2.13-1+jessie1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.3.0 php-7.3-opt_7.3.0-1-1+jessie1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
Debian 9 (Stretch) AMD64 4.4.9 php-4.4-opt_4.4.9-2+stretch1_amd64.deb Suhosin 0.9.37.1
5.3.29 php-5.3-opt_5.3.29-4+stretch1_amd64.deb Suhosin 0.9.37.1
5.4.45 php-5.4-opt_5.4.45-3+stretch1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
5.5.38 php-5.5-opt_5.5.38-5+stretch1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
ImageMagick 3.4.3
5.6.39 php-5.6-opt_5.6.39-1+stretch1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
ImageMagick 3.4.3
LDAP
Tidy
7.0.33 php-7.0-opt_7.0.33-1+stretch1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.1.25 php-7.1-opt_7.1.25-1+stretch1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.2.13 php-7.2-opt_7.2.13-1+stretch1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.3.0 php-7.3-opt_7.3.0-1-1+stretch1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
Ubuntu 16.04 LTS AMD64 5.6.39 php-5.6-opt_5.6.39-1+xenial1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
ImageMagick 3.4.3
LDAP
Tidy
7.0.33 php-7.0-opt_7.0.33-1+xenial1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.1.25 php-7.1-opt_7.1.25-1+xenial1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.2.13 php-7.2-opt_7.2.13-1+xenial1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.3.0 php-7.3-opt_7.3.0-1-1+xenial1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
Ubuntu 18.04 LTS AMD64 5.6.39 php-5.6-opt_5.6.39-1+bionic1_amd64.deb Suhosin 0.9.38
APCu 4.0.11
ImageMagick 3.4.3
LDAP
Tidy
7.0.33 php-7.0-opt_7.0.33-1+bionic1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.1.25 php-7.1-opt_7.1.25-1+bionic1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.2.13 php-7.2-opt_7.2.13-1+bionic1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy
7.3.0 php-7.3-opt_7.3.0-1-1+bionic1_amd64.deb APCu 5.1.14
ImageMagick 3.4.3
LDAP
Tidy

Diese Pakete werden in /opt/ installiert und sind somit sauber vom restlichen System getrennt. Um das Debian-Repository einzubinden, fügen Sie folgende Zeile in /etc/apt/sources.list.d/liveconfig.list hinzu:

liveconfig.list
deb http://repo.liveconfig.com/debian/ stretch php

Wenn Sie nicht Debian 9 verwenden, ersetzen Sie „stretch“ durch den Namen Ihrer jeweiligen Version (Debian 8: „jessie“, Ubuntu 18: „bionic“).

PHP-Version in LiveConfig registrieren

Die Registrierung zusätzlicher PHP-Versionen erfolgt ab LiveConfig v2.6 über eine Lua-Datei im Verzeichnis /etc/liveconfig/lua.d/. Um zum Beispiel die PHP-Version 5.6 zu registrieren, legen Sie dort eine Datei namens php56.lua mit folgendem Inhalt an:

php56.lua
LC.web.addPHP( {
  ['id']  = 'php56',
  ['cli'] = '/opt/php-5.6/bin/php',
  ['cgi'] = '/opt/php-5.6/bin/php-cgi',
  ['fpm'] = {
    ['bin']     = '/opt/php-5.6/sbin/php-fpm',
    ['start']   = 'service php56-fpm start',
    ['stop']    = 'service php56-fpm stop',
    ['reload']  = 'service php56-fpm reload',
    ['pool']    = '/etc/php-fpm/php56-fpm.d',
    ['sockets'] = '/var/run/php56-fpm'
  }
} )

Es wird also die Lua-Funktion LC.web.addPHP() mit einer Tabelle als Parameter aufgerufen. Die Tabellenwerte sind im einzelnen:

  • id - Suffix für die Apache-Handler, Verzeichnisnamen usw. - sollte am besten möglichst kurz sein und nur aus Buchstaben und Zahlen bestehen
  • cli - Pfad zur Kommandozeilen-Version des jeweiligen PHP-Interpreters (optional)
  • cgi - Pfad zur CGI/FastCGI-Version des jeweiligen PHP-Interpreters (zwingend erforderlich!)
  • fpm - weitere Tabelle mit Einstellunen zur FPM-Version (optional):
    • bin - Pfad zur FPM-Version des jeweiligen PHP-Interpreters
    • start - Befehl zum Starten des FPM-Pools
    • stop - Befehl zum Stoppen des FPM-Pools
    • reload - Befehl zum neu laden der FPM-Konfiguration
    • pool - Verzeichnisname, in dem die einzelnen Pool-Konfigurationen (<Vertrag>.conf) abgelegt werden
    • sockets - Verzeichnisname, in dem die Sockets zur Kommunikation mit dem FPM-Instanzen zu finden sind

Die o.g. PHP-Pakete für Debian/Ubuntu installieren ab PHP 5.6 automatisch eine solche Datei. Nur für PHP <5.6 sowie PHP aus anderen Repositories (bzw. bei anderen Linux-Distributionen) müssen Sie PHP manuell registrieren.

Alternativ zum Anlegen einer Datei in /etc/liveconfig/lua.d/ können Sie PHP auch über den vereinfachten Aufruf von LC.web.addPHP in /usr/lib/liveconfig/lua/custom.lua anlegen - dieses Vorgehen ist jedoch veraltet und wird nicht mehr empfohlen:

custom.lua
LC.web.addPHP("php55", "/opt/php-5.5/bin/php-cgi")
LC.web.addPHP("php56", "/opt/php-5.6/bin/php-cgi")

Ob alles klappt, können Sie mit dem Befehl liveconfig --diag testen - dort sollten dann die erkannten PHP-Versionen mit aufgeführt werden:

root@www:~# liveconfig --diag
Running OS diagnostics...
[...]
Checking for web server software:
 - Found 'apache' web server
   Version: '2.2.16'
   Package version: '2.2.16-6+squeeze12'
   SNI support: yes
   Modules: core log_config logio mpm_prefork http so actions alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgi deflate dir env fcgid include mime negotiation php5 reqtimeout rewrite setenvif ssl suexec suphp
 - PHP 5.5.9 (code='php55', bin='/opt/php-5.5.9/bin/php-cgi')
   default php.ini: '(null)'
 - PHP 5.3.3 (code='php5', bin='/usr/bin/php-cgi')
   default php.ini: '/etc/php5/cgi/php.ini'
[...]

suPHP

Um die zusätzlichen PHP-Versionen auch mit suPHP nutzen zu können, müssen Sie die PHP-Binaries auch noch im Abschnitt [handlers] der suPHP-Konfigurationsdatei (meist /etc/suphp/suphp.conf) auflisten. Geben Sie als Handler jeweils application/x-httpd- + Suffix an - im o.g. Beispiel also:

suphp.conf
[...]
[handlers]
;Handler for php-scripts
[...]
application/x-httpd-php55="php:/opt/php-5.5/bin/php-cgi"
application/x-httpd-php56="php:/opt/php-5.6/bin/php-cgi"
[...]

Abschließend müssen Sie Apache noch neu starten, damit die geänderte suPHP-Konfiguration eingelesen wird.

PHP-Version umschalten

Nach einem Neustart von LiveConfig erscheint beim Bearbeiten von (Sub)Domain-Einstellungen automatisch eine Auswahlbox für die gewünschte PHP-Version.

Suhosin-Erweiterung nutzen

Wir statten die PHP5-Pakete mit der Suhosin-Erweiterung aus. Diese sorgt für etwas mehr Sicherheit im PHP-Interpreter und ermöglicht mit LiveConfig beispielsweise alle via PHP hochgeladenen Dateien erst durch einen Virenscanner zu prüfen.

Wenn suhosin in dem jeweiligen PHP-Paket verfügbar ist, dann existiert eine Datei namens /opt/php-#.#/etc/conf.d/suhosin.ini. Um Suhosin zu aktivieren/deaktivieren, bearbeiten Sie diese .ini-Datei entsprechend.

de/multiphp.txt · Zuletzt geändert: 2018/12/07 15:42 von wikiadmin

Benutzer-Werkzeuge