PHP: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
 
(64 dazwischenliegende Versionen von 14 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{HSDoku-Links}}
=== PHP per FastCGI ===
PHP wird bei Hostsharing per FastCGI ausgeführt. Dafür wird automatisch in jedem Domainverzeichnis unter "fastcgi/" und "fastcgi-ssl/" eine "hs-phpstub"-Datei angelegt. Der Apache Webserver ist konfiguriert .php Dateien über diesen "Stub" mit den Rechten des Users auszuführen.


[[Kategorie:HSDoku]]
Anwender, die lediglich PHP-Dateien hochgeladen haben, brauchen ausdrücklich keine eigene php.ini.
[[Kategorie:WWW]]
 
=== Auswahl der PHP-Version ===


PHP wird heute bei HS standardmäßig per FastCGI vorkonfiguriert. Dafür wird in jedem Domainverzeichnis unter fastcgi/ eine phpstub Datei angelegt und der Apache Webserver ist konfiguriert .php Dateien über diesen "Stub" mit den Rechten des Users zu auszuführen.
In HSAdmin kann pro Domain festgelegt werden, welche PHP-Version der "hs-phpstub" für das Ausführen von PHP-Skripten verwendet. Zur Zeit werden die PHP-Version 8.2, 8.1, 8.0 und 7.4 unterstützt.


([[PHP via CGI installieren]], beschreibt eine ältere und langsamere Schnittstelle .php Dateien ausführen zu lassen.)
In HSAdmin gehst du zuerst links in der Navigationsleiste in dein Paket, und wählst dann rechts im Hauptfenster den Reiter "Domains". Dann wählst du deine Domain, und klickst auf das "Bearbeiten" Symbol.
Dann kannst du unter "FastCGI PHP-Interpreter" deine gewünschte PHP Version wählen.


Dort kann auch eine selbstinstallierte Version von PHP angegeben werden.


Siehe auch der Screenshot im Handbuch, auf https://www.hostsharing.net/doc/managed-operations-platform/tutorials/domain/


=== Anpassung der PHP Grundkonfiguration ===  
=== Anpassung der PHP Konfiguration ===  


Um die PHP Konfiguration an eigene Bedürfnisse anzupassen legt man eine Konfigurationsdatei Namens php.ini oder php-cgi-fcgi.ini im fastcgi Verzeichnis der Domain an. (Für https:// entsprechend im -ssl Verzeichnis.) Als Vorlage kann eine php-cgi-fcgi.ini dienen, die vom HS PHP Maintainer zusammen mit optionalen PHP Versionen unter /opt bereitgestellt wurde.
Die Datei "php.ini" wird zur Konfiguration des PHP-Interpreters verwendet. Die Voreinstellungen können pro Domain überschrieben werden. Dazu legt der Domain-Administrator im Verzeichnis "fastcgi-ssl/" (bzw. "fastcgi/") eine eigene Datei "php.ini" an.


Der komplette Pfad zu dieser Datei lautet zum Beispiel
(für den Webspace "xyz00" den Domain-User "xyz00-meinbenutzer" und die Domain "meinedomain.de"):


Beispiel:
  /home/pacs/xyz00/users/meinbenutzer/doms/meinedomain.de/fastcgi-ssl/php.ini


cd doms/example.com/fastcgi/
In dieser Datei müssen nicht alle Konfigurationsoptionen von PHP definiert sein, sondern nur die, die sich gegenüber der Standard php.ini ändern sollen. Diese liegt in /etc/php/VERSIONSNUMMER/cgi und kann dort eingesehen werden.
cp /opt/php/5.2.5/etc/php-cgi-fcgi.ini php.ini


Und anschließend die php.ini anpassen.
'''Achtung:''' Kommentare nicht mit # einleiten (kann zu unerwarteten Fehlkonfigurationen führen), Kommentarzeichen ist das Semikolon ";".


'''Achtung:''' Keine Kommentare mit # einleiten, Kommentarzeichen ist das Semikolon ";".
Häufig anzupassen sind z.B.:


Häufig benötigt wird z.B. die
* die Content-Type charset= Vorgabe für den HTTP Header.


* Anpassung der Content-Type charset= Vorgabe für den HTTP Header.
* der maximal verwendbare Hauptspeicher (memory_limit).


* Anpassung des maximal verwendbaren Hauptspeichers (memory_limit).
* die maximale Größe hochgeladener Dateien (post_max_size).


* Anpassung der maximalen Größe hochgeladener Dateien (post_max_size).
* die aktiven Extensions.


* Aktivierung gewünschter Extensions.


Beispiel: Durch das Löschen des ";" Kommentarzeichens vor "extension=mysql.so" werden z.B. die Module für den Zugriff Zugriff auf die GD-Library und MySQL über das klassische Modul aktiviert.
Beispiel einer php.ini:  


<syntaxhighlight lang=ini line>
  ------8< SCHNIPP >8------
  ------8< SCHNIPP >8------
  [..]
  [..]
  memory_limit = 16M (oder höher)
  memory_limit = 128M (default)
   
  post_max_size = 8M (default)
upload_max_filesize = 2M (default)
display_errors = Off (default)
log_errors = Off (default)
error_log = /home/pacs/xyz00/users/meinbenutzer/doms/meinedomain.de/fastcgi-ssl/php_errors.log
 
  [..]
  [..]
  default_charset = "UTF-8"
  default_charset = "UTF-8"
  ; Vorgabe ist iso-8859-1
  ; (ist sonst iso-8859-1)
  ; Der charset kann aber wiederum durch einen Funktionsaufruf
[..]
  ; header("Content-Type: text/html; charset=iso-8859-1")
  post_max_size = 8M
  ; im PHP-Skript überschrieben werden (sofern output_buffering = On).
[..]
  ;extension=curl.so
extension=gd.so
  ;extension=imap.so
;extension=mcrypt.so
  ;extension=mhash.so
;extension=ming.so
extension=mysql.so
;extension=mysqli.so
;extension=odbc.so
;extension=pdo.so
;extension=pdo_mysql.so
  ------8< SCHNIPP >8------
  ------8< SCHNIPP >8------
</syntaxhighlight>


'''Beachte:''' Eine geänderte php.ini Konfiguration wird mit FastCGI erst übernommen, wenn die PHP Prozesse des Users (die über längere Zeit laufen bleiben) neu gestartet werden.
'''Beachte:''' Eine geänderte php.ini Konfiguration wird mit FastCGI erst übernommen, wenn die PHP Prozesse des Users (die über längere Zeit laufen bleiben) neu gestartet werden.


Die Brechstange, mit der das Neustarten der PHP Prozesse erzwungen werden kann, ist diese zu killen:
Man kann ein Neustarten der PHP Prozesse mit dem folgenden Kommando erzwingen:
killall php -u $USER
 
* Geht das Neuladen der Konfiguration nicht sanfter falls die Seiten stark frequentiert sind?
  killall -u $USER -r php
 
$USER enhält als Umgebungsvariable den aktuell angemeldeten Benutzer und muss nicht durch den Benutzernamen (xyz00 oder xyz00-user) ersetzt werden. Nur die Prozesse des angemeldeten Users $USER werden gelöscht. "-r" bewirkt, dass der Ausdruck "php" als regulärer Ausdruck interpretiert wird. Intern heißen die sichtbaren Prozesse nicht "php" sondern beispielsweise "php7.4"


=== PHP Sicherheit ===
=== PHP Sicherheit ===
Zeile 71: Zeile 72:
==== open_basedir ====
==== open_basedir ====


Sofern der PHP Parameter open_basdir nicht gesetzt ist (Vorgabe) können (kompromittierte) php Skripte an alle Dateien kommen des Users kommen, ohne einen extra Shellzugang installieren zu müssen und dadurch entdeckt zu werden.
Sofern der PHP Parameter open_basdir nicht gesetzt ist (Vorgabe) können (kompromittierte) php Skripte an alle Dateien des Users kommen, ohne einen extra Shellzugang installieren zu müssen und dadurch entdeckt zu werden.


Die Passwortabfrage von Hsadmin bringt eine Abhilfe für die zentralen Dienste. (Sofern Du dein Passwort nicht in eine Datei schreibst und die Abfrage so wieder ausschaltest, wovon besser abzusehen ist.) Doch alle Daten auf die Du als Benutzer zugreifen kannst sind prinzipiell den PHP-Skripten ausgeliefert.
Die Passwortabfrage von Hsadmin bringt eine Abhilfe für die zentralen Dienste. (Sofern Du dein Passwort nicht in eine Datei schreibst und die Abfrage so wieder ausschaltest, wovon besser abzusehen ist.) Doch alle Daten auf die Du als Benutzer zugreifen kannst sind prinzipiell den PHP-Skripten ausgeliefert.
Zeile 80: Zeile 81:
  open_basedir = /home/doms/example.org/subs/
  open_basedir = /home/doms/example.org/subs/


Wenn man mehrere Subdomains hat und diese isolieren möchte, ist dies durch Aufschaltung von lokalen Subdomains auf verschiedene User möglich. (Siehe [[Domain-Aufträge]] )
Wenn man mehrere Subdomains hat und diese isolieren möchte, ist dies durch Aufschaltung von lokalen Subdomains auf verschiedene User möglich. (Siehe https://doc.hostsharing.net/users/administration/domain/index.html )


==== safe_mode ====  
==== Sicherheitskritische Funktionen ====


Dank (Fast)CGI laufen PHP Skripte zwar "nur" mit Userrechten, dennoch ist es ratsam, den PHP safe_mode zu aktivieren, sofern dies mit den eingesetzten PHP Skripten möglich ist. Der safe_mode kann auch die Daten des Users vor (kompromittierten) PHP Skripten schützen. In der php.ini ist dafür die Option
Weitere Dinge die deaktiviert werden sollten, wenn sie nicht benötigt werden, was im allgemeinen der Fall ist, sind: Das öffnen von URLs als Dateien,


  safe_mode = On
allow_url_fopen = Off


zu setzten, und die weiteren Optionen sind zu prüfen.
und die Ausführung von Systembefehlen.


Falls Systembefehle oder Shellskripte ausgeführt werden müssen, sollten diese über ein extra safe_mode_exec_dir außerhalb des open_basedir bereitgestellt werden (z.B. ~/priv/bin).
disable_functions = show_source, system, passthru, shell_exec, exec, phpinfo, popen, proc_open


==== Sicherheitskritische Funktionen ====


Weitere Dinge die deaktiviert werden sollten, wenn sie nicht benötigt werden, was im allgemeinen der Fall ist, sind: Das öffnen von URLs als Dateien,
===  eigene PHP Konfigurationen und verschiedene nebeneinander verwenden ===
 
Pro Domain kann die gewünschte PHP Version gewählt werden.
 
Wenn mit mehreren Subdomains mit unterschiedlichen PHP Versionen oder Konfigurationen gearbeitet werden soll, empfiehlt sich, die Subdomains direkt als Domain im HSAdmin anzulegen.


allow_url_fopen = Off
Wir benutzen leichtgewichtige Subdomains immer seltener.


und die Ausführung von Systembefehlen.
==== Beispiel muster.example.com ====
Im HSAdmin gehst du zu deinem Paket xyz00, dort gehst du in rechts in den Reiter Domains, legst dort die Domain muster.example.com an, und wählst bei "FastCGI PHP Interpreter" entweder eine vorinstallierte PHP Version, oder eine von dir installiert PHP Version.


disable_functions = show_source, system, passthru, shell_exec, exec, phpinfo, popen, proc_open
<pre>
wenn benötigt:
vi ~/doms/muster.example.com/fastcgi/php.ini
</pre>


== Vorinstallierte PHP Version wechseln ==


Hostsharing stellt neben der aktuellen Standardversion PHP 8.2 auch die Versionen PHP 7.4, 8.0 und 8.1 zur Verfügung.




=== Spezielle PHP Versionen oder mehrere verschiedene Konfigurationen verwenden ===
===PHP 8.2 für ssh-Zugang per Shell aktivieren===


==== Versionen ====
Möchte man an der Shell immer /usr/bin/php8.2 statt /usr/bin/php aufrufen, dann kann der Befehl auch in die Datei "~/.profile" ergänzt werden  mit der Zeile:
<pre>alias php='/usr/bin/php8.2'</pre>


Um spezielle PHP Versionen zu nutzen kopiert man sich zunächst einen entsprechenden phpstub und eine passende Konfigurationsdatei in das fastcgi Verzeichnis. Die stubs für spezielle alternative Debian Versionen sind unter /usr/local/src/phpstub zu finden. Unter /opt/php stehen darüber hinaus bei HS auch weitere optionale PHP Versionen (neben den aktuellen Debian Versionen) zur Verfügung. Für [[ PHP_5.2.5 | Version 5.2.5 ]] beispielsweise geht man wie folgt vor:
Nach Aktualisierung der Datei "~/.profile" noch eingeben
<pre>$ source ~/.profile</pre>
Dann sollte der Aufruf php -v die version php 8.2 zurückgeben.  


cd doms/example.com/cgi/
Gleiches gilt natürlich auch andere bei HS verfügbare PHP Versionen.
cp /opt/php/5.2.5/bin/php525stub .
cp /opt/php/5.2.5/etc/php-cgi-fcgi.ini .


Anschließend muss der Apache Webserver noch angewiesen werden auch diese bestimmte PHP Version zu verwenden. Dazu werden der [[.htaccess]] Datei im DocumentRoot der Domain zwei Zeilen hinzugefügt bzw. eine .htaccess mit den zwei Zeilenangelegt. Im Beispiel handelt es sich um die Domain www.example.com, also:
==== Alternative: <tt>PATH</tt> Variable setzen ====


cd ~/doms/example.com/subs/www
Eine Alternative ist die Nutzung einer alternativen Verlinkung und das setzen eines eigenen Pfades
vi .htaccess
Composer, oder andere php Scripte können auch als Programme php aufrufen, wenn sie dazu die Version aus <tt>/usr/bin/env</tt> nutzen, bekommen Sie die Standard PHP version geliefert, beispielsweise php7.4.
Dieser Aufruf umgeht jeglichen Alias in <tt>~/.profile</tt> oder <tt>~/.bash_profile</tt>.
Welche verlinkung in <tt>/usr/bin/env</tt> gesetzt ist lässt sich überprüfen durch den Befehl:
<pre>$ which php</pre>
sollte ergeben:
<pre>/usr/bin/php</pre> (und dies ist verlinkt mit irgendeiner System PHP Version zum Beispiel php7.4


Für Version 5.2.5 wären folgende zwei Zeilen einzugeben:
Anstelle der Nutzung also eines Alias wird nun einfach ein symbolischer Link an eine gewünschte Position gesetzt, zum Beispiel mit:
<pre>$ mkdir /home/doms/example.com/app/php8.2</pre>
<pre>$ ln -s /usr/bin/php8.2 /home/doms/example.com/app/php8.2/<strong>php</strong></pre> (wichtig, es muss hier als "php" benannt werden"
Nun wird der Pfad um diesen Punkt erweitert:
in <tt>~/.profile</tt> oder <tt>~/.bash_profile</tt>
<pre>PATH="/home/doms/example.com/app/php8.2:$PATH"</pre>
Nun liegt der Pfad noch vor dem Systempfad, was sich durch den Befehl
<pre>$ echo $PATH</pre> überprüfen lässt:
hier steht jetzt so etwas wie:
<pre><strong>/home/doms/example.com/app/php8.2</strong>:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games</pre>
das heißt, bevor der Aufruf des Befehls php in /usr/bin/ danach sucht, hat er das Script "php" schon in dem neu erstellten Ordner gefunden und ruft diesen auf.
Diese <tt>PATH</tt> Variable funktioniert nun natürlich genauso für alle Bash / cli Eingaben und ersetzt die Vergabe von Alias.
<pre>$ which php</pre> ergibt nun:
<pre>/home/doms/example.com/app/php8.2/php</pre>


AddType application/x-httpd-phpcgi .php
== Eigene PHP Version ==
Action application/x-httpd-phpcgi /cgi-bin/php525stub
Es kann auch eine eigene PHP Version im Paket installiert werden.
Eine Kurzanleitung ist unter [[Eigene_PHP_Version]] beschrieben.


==== Verschiedene parallele Konfigurationen ====  
== Eigener PHP FPM Prozess ==


Um verschiedene PHP Konfigurationen nebeneinander zu verwenden, kopierst Du den phpstub in ein Unterzeichnis von (fast)cgi(-ssl) und mappst nach Belieben deine PHP Dateien darauf. (Analog wie für eine andere PHP Version per [[.htaccess]]) So können beliebig viele Konfigurationen nebeneinander genutzt werden.
auf einem Managed Server kann jeder Nutzer nach belieben auch php-fpm als eigenen Prozess starten.
Ein paar Notizen dazu finden sich auf der Seite [[PHP_FPM]].


----
----
Zeile 134: Zeile 165:
[[Kategorie:Software]]
[[Kategorie:Software]]
[[Kategorie:Glossar]]
[[Kategorie:Glossar]]
[[Kategorie:WWW]]

Aktuelle Version vom 31. Mai 2024, 14:01 Uhr

PHP per FastCGI

PHP wird bei Hostsharing per FastCGI ausgeführt. Dafür wird automatisch in jedem Domainverzeichnis unter "fastcgi/" und "fastcgi-ssl/" eine "hs-phpstub"-Datei angelegt. Der Apache Webserver ist konfiguriert .php Dateien über diesen "Stub" mit den Rechten des Users auszuführen.

Anwender, die lediglich PHP-Dateien hochgeladen haben, brauchen ausdrücklich keine eigene php.ini.

Auswahl der PHP-Version

In HSAdmin kann pro Domain festgelegt werden, welche PHP-Version der "hs-phpstub" für das Ausführen von PHP-Skripten verwendet. Zur Zeit werden die PHP-Version 8.2, 8.1, 8.0 und 7.4 unterstützt.

In HSAdmin gehst du zuerst links in der Navigationsleiste in dein Paket, und wählst dann rechts im Hauptfenster den Reiter "Domains". Dann wählst du deine Domain, und klickst auf das "Bearbeiten" Symbol. Dann kannst du unter "FastCGI PHP-Interpreter" deine gewünschte PHP Version wählen.

Dort kann auch eine selbstinstallierte Version von PHP angegeben werden.

Siehe auch der Screenshot im Handbuch, auf https://www.hostsharing.net/doc/managed-operations-platform/tutorials/domain/

Anpassung der PHP Konfiguration

Die Datei "php.ini" wird zur Konfiguration des PHP-Interpreters verwendet. Die Voreinstellungen können pro Domain überschrieben werden. Dazu legt der Domain-Administrator im Verzeichnis "fastcgi-ssl/" (bzw. "fastcgi/") eine eigene Datei "php.ini" an.

Der komplette Pfad zu dieser Datei lautet zum Beispiel (für den Webspace "xyz00" den Domain-User "xyz00-meinbenutzer" und die Domain "meinedomain.de"):

 /home/pacs/xyz00/users/meinbenutzer/doms/meinedomain.de/fastcgi-ssl/php.ini 

In dieser Datei müssen nicht alle Konfigurationsoptionen von PHP definiert sein, sondern nur die, die sich gegenüber der Standard php.ini ändern sollen. Diese liegt in /etc/php/VERSIONSNUMMER/cgi und kann dort eingesehen werden.

Achtung: Kommentare nicht mit # einleiten (kann zu unerwarteten Fehlkonfigurationen führen), Kommentarzeichen ist das Semikolon ";".

Häufig anzupassen sind z.B.:

  • die Content-Type charset= Vorgabe für den HTTP Header.
  • der maximal verwendbare Hauptspeicher (memory_limit).
  • die maximale Größe hochgeladener Dateien (post_max_size).
  • die aktiven Extensions.


Beispiel einer php.ini:

 ------8< SCHNIPP >8------
 [..]
 memory_limit = 128M (default)
 post_max_size = 8M (default)
 upload_max_filesize = 2M (default)
 display_errors = Off (default)
 log_errors = Off (default)
 error_log = /home/pacs/xyz00/users/meinbenutzer/doms/meinedomain.de/fastcgi-ssl/php_errors.log

 [..]
 default_charset = "UTF-8"
 ; (ist sonst iso-8859-1)
 ; Der charset kann aber wiederum durch einen Funktionsaufruf
 ; header("Content-Type: text/html; charset=iso-8859-1")
 ; im PHP-Skript überschrieben werden (sofern output_buffering = On).
 ------8< SCHNIPP >8------

Beachte: Eine geänderte php.ini Konfiguration wird mit FastCGI erst übernommen, wenn die PHP Prozesse des Users (die über längere Zeit laufen bleiben) neu gestartet werden.

Man kann ein Neustarten der PHP Prozesse mit dem folgenden Kommando erzwingen:

 killall -u $USER -r php

$USER enhält als Umgebungsvariable den aktuell angemeldeten Benutzer und muss nicht durch den Benutzernamen (xyz00 oder xyz00-user) ersetzt werden. Nur die Prozesse des angemeldeten Users $USER werden gelöscht. "-r" bewirkt, dass der Ausdruck "php" als regulärer Ausdruck interpretiert wird. Intern heißen die sichtbaren Prozesse nicht "php" sondern beispielsweise "php7.4"

PHP Sicherheit

open_basedir

Sofern der PHP Parameter open_basdir nicht gesetzt ist (Vorgabe) können (kompromittierte) php Skripte an alle Dateien des Users kommen, ohne einen extra Shellzugang installieren zu müssen und dadurch entdeckt zu werden.

Die Passwortabfrage von Hsadmin bringt eine Abhilfe für die zentralen Dienste. (Sofern Du dein Passwort nicht in eine Datei schreibst und die Abfrage so wieder ausschaltest, wovon besser abzusehen ist.) Doch alle Daten auf die Du als Benutzer zugreifen kannst sind prinzipiell den PHP-Skripten ausgeliefert.

Mit open_basedir wird festgelegt in welchen Verzeichnissen PHP Skripte lesen und schreiben dürfen. Geprüft wird dabei ob der zu öffnende Pfad mit dem angegebene Pfad beginnt. Es ist daher wichtig ob sich am Ende ein "/" befindet oder nicht. Ein open_basedir von /home/doms/example.org/subs/www (ohne /) erlaubt somit z.B. auch Zugriffe auf die Subdomain www2 etc.

Beispielzeile für die php.ini:

open_basedir = /home/doms/example.org/subs/

Wenn man mehrere Subdomains hat und diese isolieren möchte, ist dies durch Aufschaltung von lokalen Subdomains auf verschiedene User möglich. (Siehe https://doc.hostsharing.net/users/administration/domain/index.html )

Sicherheitskritische Funktionen

Weitere Dinge die deaktiviert werden sollten, wenn sie nicht benötigt werden, was im allgemeinen der Fall ist, sind: Das öffnen von URLs als Dateien,

allow_url_fopen = Off

und die Ausführung von Systembefehlen.

disable_functions = show_source, system, passthru, shell_exec, exec, phpinfo, popen, proc_open


eigene PHP Konfigurationen und verschiedene nebeneinander verwenden

Pro Domain kann die gewünschte PHP Version gewählt werden.

Wenn mit mehreren Subdomains mit unterschiedlichen PHP Versionen oder Konfigurationen gearbeitet werden soll, empfiehlt sich, die Subdomains direkt als Domain im HSAdmin anzulegen.

Wir benutzen leichtgewichtige Subdomains immer seltener.

Beispiel muster.example.com

Im HSAdmin gehst du zu deinem Paket xyz00, dort gehst du in rechts in den Reiter Domains, legst dort die Domain muster.example.com an, und wählst bei "FastCGI PHP Interpreter" entweder eine vorinstallierte PHP Version, oder eine von dir installiert PHP Version.

wenn benötigt:
vi ~/doms/muster.example.com/fastcgi/php.ini

Vorinstallierte PHP Version wechseln

Hostsharing stellt neben der aktuellen Standardversion PHP 8.2 auch die Versionen PHP 7.4, 8.0 und 8.1 zur Verfügung.


PHP 8.2 für ssh-Zugang per Shell aktivieren

Möchte man an der Shell immer /usr/bin/php8.2 statt /usr/bin/php aufrufen, dann kann der Befehl auch in die Datei "~/.profile" ergänzt werden mit der Zeile:

alias php='/usr/bin/php8.2'

Nach Aktualisierung der Datei "~/.profile" noch eingeben

$ source ~/.profile

Dann sollte der Aufruf php -v die version php 8.2 zurückgeben.

Gleiches gilt natürlich auch andere bei HS verfügbare PHP Versionen.

Alternative: PATH Variable setzen

Eine Alternative ist die Nutzung einer alternativen Verlinkung und das setzen eines eigenen Pfades Composer, oder andere php Scripte können auch als Programme php aufrufen, wenn sie dazu die Version aus /usr/bin/env nutzen, bekommen Sie die Standard PHP version geliefert, beispielsweise php7.4. Dieser Aufruf umgeht jeglichen Alias in ~/.profile oder ~/.bash_profile. Welche verlinkung in /usr/bin/env gesetzt ist lässt sich überprüfen durch den Befehl:

$ which php

sollte ergeben:

/usr/bin/php

(und dies ist verlinkt mit irgendeiner System PHP Version zum Beispiel php7.4

Anstelle der Nutzung also eines Alias wird nun einfach ein symbolischer Link an eine gewünschte Position gesetzt, zum Beispiel mit:

$ mkdir /home/doms/example.com/app/php8.2
$ ln -s /usr/bin/php8.2 /home/doms/example.com/app/php8.2/<strong>php</strong>

(wichtig, es muss hier als "php" benannt werden"

Nun wird der Pfad um diesen Punkt erweitert: in ~/.profile oder ~/.bash_profile

PATH="/home/doms/example.com/app/php8.2:$PATH"

Nun liegt der Pfad noch vor dem Systempfad, was sich durch den Befehl

$ echo $PATH

überprüfen lässt:

hier steht jetzt so etwas wie:

<strong>/home/doms/example.com/app/php8.2</strong>:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

das heißt, bevor der Aufruf des Befehls php in /usr/bin/ danach sucht, hat er das Script "php" schon in dem neu erstellten Ordner gefunden und ruft diesen auf. Diese PATH Variable funktioniert nun natürlich genauso für alle Bash / cli Eingaben und ersetzt die Vergabe von Alias.

$ which php

ergibt nun:

/home/doms/example.com/app/php8.2/php

Eigene PHP Version

Es kann auch eine eigene PHP Version im Paket installiert werden. Eine Kurzanleitung ist unter Eigene_PHP_Version beschrieben.

Eigener PHP FPM Prozess

auf einem Managed Server kann jeder Nutzer nach belieben auch php-fpm als eigenen Prozess starten. Ein paar Notizen dazu finden sich auf der Seite PHP_FPM.