PHP in der Webhosting-Umgebung
Mögliche PHP-Anwendungen
In der Webhosting-Umgebung des LRZ können alle PHP-Anwendungen betrieben werden, für die die installierten PHP-Komponenten (s.u.) ausreichen. Dazu gehören u.a. die folgenden Web-Anwendungen:
- Diverse CMS wie z.B.: Drupal, Joomla, WordPress, TYPO3
- LimeSurvey (freie Anwendung für Online-Umfragen)
- MediaWiki (frei verfügbare Verwaltungs-SW für Inhalte in Form eines Wiki-Systems)
Falls die von Ihnen gesuchte PHP-Anwendung nicht zu diesen Beispielen gehört, gehen Sie bitte folgendermaßen vor:
- Informieren Sie sich (z.B. auf der Homepage der Anwendung), welche Systemanforderungen die Anwendung stellt.
- Klären Sie mit Hilfe des Abschnitts "Verfügbare PHP-Komponenten" (s.u.), ob die Anforderungen erfüllt sind.
Evtl. benötigen Sie dazu auch noch Informationen aus weiteren Webhosting-Artikeln:
PHP execution
In our infrastructure, PHP is executed via the FastCGI Process Manager (PHP FPM), making your website's PHP processes run with the privileges of your website's functional account.
Available PHP versions
We usually provide more than one PHP version at a time. The current default PHP version will be used for a new website.
You may choose to use a different version than the default one. Please contact the LRZ web hosting team to change your website's PHP version.
Please note
Each major version of PHP, like 7.3 or 7.4, is supported by the PHP development team for two years (see "Supported Versions").
As soon as a major release reaches its end of life (EOL) and no longer receives security updates, we will also no longer be able to provide support for that PHP version to avoid security risks. This means that we will upgrade websites in our hosting running the PHP version that is falling out of support to the next higher major version (e.g. from PHP 7.3 to 7.4). This action usually happens in early December each year. As part of this, you must ensure that your web application is compatible with the next higher PHP version. If you use a CMS such as TYPO3 or Wordpress, you can usually find compatibility information in the system requirements.
We will inform you about an upcoming change in our supported PHP versions several weeks in advance.
In cases where a non-default PHP version was configured for the website (for example, if you use a very recent PHP version), your website's PHP version will not be changed automatically.
PHP extensions
A range of PHP extensions/libraries are available in our infrastructure, e.g. gd
(graphics library), ftps
, imap
, intl
, ldap
, mbstring
or mcrypt
. Due to the maintenance aspect and our limited person power, we will usually not be able to provide more extensions. Please contact us if there is a certain extension that you need and we will consider if we can provide it. The same applies to the customisation of PHP parameters.
Using PHP on the command line and in cron jobs
On the access servers, PHP is available for use on the command-line and in cron jobs. The php
command executes the most recent installed version of PHP that is configured for your website. You can find out the exact version with the -v
flag. The following shows an example where PHP 7.4 is configured for the site. PHP is executed in version 7.4.11 ("11" is the patch level version).
user@webdev02:~$ php -v PHP 7.4.11 (cli) (built: Oct 8 2020 17:32:43) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
However, the PHP version that is executed via the php
command may change due to updates (see the information box under "Available PHP versions"). Therefore, we provide a dedicated command for each major PHP version, like for example php7.4
(see below for more information).
Tip
The configuration of your website determines which major PHP version your website uses (see above).
To avoid errors in the execution of your web application, you should also use this major PHP version on the command line or in cron jobs or other scripts. Therefore, it is recommended to use the version-specific PHP command (see below) to avoid unexpected version jumps.
There are various ways to find out which PHP versions are installed and what the commands are called:
user@webdev02:~$ update-alternatives --list php /usr/bin/php7.1 /usr/bin/php7.2 /usr/bin/php7.3 /usr/bin/php7.4 /usr/bin/php8.0 user@webdev02:~$ ls /usr/bin/php* /usr/bin/php /usr/bin/php7.1 /usr/bin/php7.2 /usr/bin/php7.3 /usr/bin/php7.4 /usr/bin/php8.0 user@webdev02:~$ ls /bin/php* /bin/php /bin/php7.1 /bin/php7.2 /bin/php7.3 /bin/php7.4 /bin/php8.0
Notes:
- You can find the PHP commands in the
/bin
directory as well as under/usr/bin
. - The PHP commands in
/bin
and/usr/bin
are identical. - Usually,
/bin
and/usr/bin
are included in the command search path (meaning both directories are contained in the$PATH
environment variable, which you can check by running the commandecho $PATH
). This means that you can simply use the command without using the whole path (for example,php7.4
instead of/usr/bin/php7.4
).
Tip
Cron jobs are executed in a separate environment where the command search path is different from the interactive shell. When writing cron jobs, you should therefore do the following to avoid problems:
- Use absolute paths for commands (for example, use
/usr/bin/php7.4
instead ofphp7.4
). - If your cron job executes a shell script, you should set the
$PATH
environment variable explicitly at the start of the script.
Verfügbare PHP-Komponenten
Die PHP-Umgebung besteht aus mehreren Komponenten:
- Interpreter für die Script-Sprache "PHP".
Die PHP-Scripts werden mit den Rechten der Funktionskennung ausgeführt, mit der die Website gesteuert wird. - Funktionale Erweiterungen/Bibliotheken.
Beispiele: "ftps
", "gd
" (Grafik-Bibliothek), "imap
", "intl
", "ldap
", "mbstring
", "mcrypt
" - Composer (anwendungsorientierter Paketmanager für PHP) auf dem Zugangs-Rechner.
- Sonstige SW-Pakete, die von den obigen Komponenten benötigt werden.
Weitere Komponenten kann das LRZ wegen des Pflegeaufwands leider nur in einem sehr begrenzten Umfang zur Verfügung stellen. Wenden Sie sich bitte an das Webhosting-Team, falls Sie etwas vermissen.
Analoges gilt für die Anpassung von PHP-Parametern.
Im Augenblick (Stand Januar 2024) stehen passende Komponenten für die folgenden PHP-Branches (s.u.) zur Verfügung: PHP-8.0, PHP-8.1, PHP-8.2
PHP-Branch der eigenen Website
Vom PHP-Entwicklungsteam bzw. von Debian werden mehrere PHP-Branches (Major-Versionen) gleichzeitig unterstützt. Für diese "aktiven" Branches gibt es zumindest Updates zur Beseitigung von neu entdeckten Sicherheitslücken. In der Webhosting-Umgebung des LRZ stehen mehrere aktive PHP-Branches gleichzeitig zur Verfügung.
Das Webhosting-Team kann durch eine geeignete Konfiguration für jede Website individuell festlegen, welche der gerade installierten PHP-Branches gelten soll. Daneben gibt es einen Default-Branch für alle Websites, bei denen kein Branch individuell konfiguriert ist.
Welcher PHP-Branch für eine Website gilt, wird nach den folgenden Regeln bestimmt:
- Bei der Website ist der Branch "X.Y" individuell konfiguriert und "X.Y" gehört zu den installierten Branches:
Die Website wird mit dem Branch "X.Y" betrieben. - Andernfalls:
Die Website wird mit dem Default-Branch für die jeweilge Umgebung betrieben.
Hinweis zum Default-Branch
In der PHP-Umgebung wird der Default-Branch regelmäßig an die Weiterentwicklung von PHP angepasst (siehe bei PHP die Übersicht "Supported Versions"). Der Update auf den nächsthöheren Branch erfolgt normalerweise einmal pro Jahr nach einer entsprechenden Vorankündigung (meist Anfang Dezember).
Wenn Ihre Website mit dem Default-Branch betrieben wird (s.o.), sorgen Sie bitte rechtzeitig vor dem jährlichen Update, dass Ihre Web-Anwendungen mit dem nächsthöheren Branch kompatibel sind. Bei vielen Web-Anwendungen findet man Hinweise zur Kompatibilität in den Systemanforderungen.
Außerdem findet man im Anhang des PHP-Handbuchs Hinweise zur Migration von einem PHP-Branch zum nächsthöheren.
Wenn bei Ihrer Website ein PHP-Branch individuell konfiguriert werden soll bzw. die bestehende Konfiguration geändert werden soll, erteilen Sie bitte dem Webhosting-Team einen entsprechenden Auftrag:
- Was soll genau gemacht werden?
- Wann soll die Konfigurationsänderung durchgeführt werden?
- Sie können mit uns einen Termin oder ein Zeitfenster vereinbaren.
- Sie teilen uns mit, dass die Änderung ab sofort oder ab einem bestimmten Termin stattfinden kann.
Nach der Änderung testen wir stichprobenartig, ob noch alles funktioniert. Dabei hoffen wir auf Ihr Verständnis:
Wegen fehlender PersonPower können unsere Tests nur sehr rudimentär sein, d.h. wir können nur ein paar Seiten anklicken.
- Aus technischen Gründen können wir prinzipiell nicht beurteilen, ob wirklich alles noch funktioniert.
Im Fehlerfall nehmen wir die Änderung sofort zurück. Wir informieren Sie in jedem Fall über den Ausgang.
Tipps zu PHP auf der Kommandozeile
Auf dem Zugangs-Rechner steht PHP auch auf der Kommandozeile zur Verfügung:
- Bei interaktiven Arbeiten
- Bei Cron-Jobs
Tipps zu Cron-Jobs
Cron-Jobs laufen in einer eigenen Umgebung ab. In dieser Umgebung ist z.B. der Kommando-Suchpfad meist anders gesetzt als beim Arbeiten mit einer interaktiven Shell. Deshalb sollte man zur Vermeidung von Problemen folgendes tun:
- Verwendung von absoluten Kommando-Pfaden bei der Definition des Cron-Jobs.
- Wenn bei der Definition des Cron-Jobs ein Shell-Script aufgerufen wird, sollte man am Anfang des Scripts den Kommando-Suchpfad explizit setzen (d.h. die Environment-Variable "
$PATH
").
Verfügbare PHP-Branches
Es gibt mehrere Methoden, wie man herausfinden kann, welche PHP-Branches in der Webhosting-Umgebung des LRZ zur Verfügung stehen. Dabei findet man auch gleichzeitig heraus, wie der spezifische PHP-Interpreter für die Kommandozeile heißt.
Man loggt sich auf dem Zugangs-Rechner mit der Funktionskennung interaktiv ein und gibt dann auf der Kommandozeile eines der folgenden Kommandos (Stand Januar 2024).
user@webdev02:~ $ update-alternatives --list php [...] /usr/bin/php8.0 /usr/bin/php8.1 /usr/bin/php8.2 user@webdev02:~ $ ls /usr/bin/php* /usr/bin/php [...] /usr/bin/php8.0 /usr/bin/php8.1 /usr/bin/php8.2 user@webdev02:~ $ ls /bin/php* /bin/php [...] /bin/php8.0 /bin/php8.1 /bin/php8.2
Anmerkungen:
- Die ls-Kommandos mit den Pattern "
/usr/bin/php*
" und "/bin/php*
" liefern die selbe Liste von Kommandos, weil es sich bei "/usr/bin
" und "/bin
" um das selbe Verzeichnis handelt: "/bin
" ist nämlich kein eigenes Verzeichnis, sondern ein Symbolic-Link (Softlink) auf das Verzeichnis "/usr/bin
". - Normalerweise sind "
/usr/bin
" und/oder "/bin
" im Kommando-Suchpfad enthalten, d.h. die Strings kommen in der Environment-Variable "$PATH
" vor. Man kann dies mit dem Kommando "echo $PATH
" überprüfen.
Deshalb kann man meist auf die Angabe eines absoluten Pfades verzichten und nur den Kommandonamen angeben (z.B. "php
" oder "php8.2
"). - Das Kommando mit dem Namen "
php
" (d.h. ohne eine Versionsnummer) ist der PHP-Interpreter für den aktuellen Default-Branch.
Achtung: Da sich der Default-Branch regelmäßig ändert, ändert sich "php
" entsprechend. - Die Kommandos mit dem Namen "
php
<Versionsnummer>" sind Interpreter für einen spezifischen Branch, der im Laufe der Zeit gleich bleibt.
Bei diesen Kommandos ändert sich nur gelegentlich die Minor-Version (wie z.B. von "8.2.11" auf "8.2.12"). Dies beeinträchtigt aber nicht die Lauffähigkeit von PHP-Scripts.
Mit der Option "–-version
" (bzw. "-v
") erhält man beim PHP-Interpreter u.a. den Branch und die Minor-Version.
user@webdev02:~ $ php --version PHP 8.1.23 (cli) (built: Oct 6 2023 10:11:51) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.23, Copyright (c) Zend Technologies with Zend OPcache v8.1.23, Copyright (c), by Zend Technologies user@webdev02:~ $ php8.2 --version PHP 8.2.11 (cli) (built: Oct 6 2023 10:11:52) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.11, Copyright (c) Zend Technologies with Zend OPcache v8.2.11, Copyright (c), by Zend Technologies
Spezifischen PHP-Branch nutzen
Der PHP-Branch für den eigenen Webauftritt wird durch den Default-Branch bzw. durch eine individuelle Konfiguration festgelegt. Manchmal benötigt man auf dem Zugangs-Rechner aber auch den PHP-Interpreter auf der Kommandozeile:
- Das verwendete CMS oder der PHP-Composer erfordert die Ausführung eines PHP-Scripts.
- In einem Cron-Job wird ein PHP-Script benötigt.
Tipp zum PHP-Branch
Zur Vermeidung von Problemen verwendet man normalerweise auch auf der Kommandozeile denjenigen PHP-Branch, der beim Webauftritt eingesetzt wird.
Falls man einen spezifischen PHP-Branch benötigt, können im Zusammenhang mit dem Kommando "php
" (Interpreter für den Default-Branch) zwei Probleme auftreten:
- Selbst wenn "
php
" im Augenblick der Interpreter für den benötigten Branch ist, ändert sich dies im Laufe der Zeit.
Deshalb steht für jeden verfügbaren Branch ein spezifisches Interpreter-Kommando zur Verfügung (wie z.B. "php8.2"), das man dann auch verwenden sollte. - Manchmal kann man den benötigten spezifischen Interpreter nicht direkt aufrufen.
Dies kann z.B. bei der Initialisierung eines CMS geschehen: Bei der Initialsierung muss man ein Setup-Script ausführen, das dann "im Inneren" den PHP-Interpreter mit dem Pfad "php
" startet. Falls dann der Default-Branch zu alt für das CMS ist, bricht das Setup-Script mit einer Fehlermeldung ab.
Beim zweiten Problem muss man "irgendwie" dafür sorgen, dass mit dem Kommandonamen "php
" der "richtige" Interpreter gestartet wird.
Angenommen, man benötigt den PHP-Branch "8.2" und die Funktionskennung der eigenen Website arbeitet mit "bash" als Shell. In diesem Fall sollte die folgende Vorgehensweise funktionieren.
Neues Kommando "php"
Man erstellt ein "neues" Kommando "php
", mit dem "php8.2
" gestartet wird.
# Erzeugen der erforderlichen Verzeichnisse. mkdir --parents --mode=02700 --verbose $HOME/bin/Overlay # Nach ".../Overlay" wechseln. cd $HOME/bin/Overlay # Erzeugen eines Symbolic-Link zum gewünschten Branch-Kommando. ln --symbolic --verbose /usr/bin/php8.2 php # Test, ob das neue "php" auch wirklich funktioniert. ./php --version
Der Verzeichnisname "Overlay
" ist nur ein Vorschlag; er soll daran erinnern, dass die Kommandos in diesem Verzeichnis gleichnamige Kommandos in System-Verzeichnissen "überlagern" sollen. Deshalb sollte man sich auch genau überlegen, welche Kommandos man in ".../Overlay
" anlegt.
"Overlay" an den Anfang des Kommando-Suchpfades
Man sorgt dafür, dass sich das Verzeichnis "$HOME/bin/Overlay
" ganz am Anfang des Kommando-Suchpfades (Variable "$PATH
") befindet.
Die Modifikation von "$PATH
" muss aber automatisch erfolgen:
- Beim Einloggen
- Beim Starten eines bash-Scripts
Dazu nutzt man aus, dass die Shell "bash" gleich mehrere Profile-Dateien besitzt. In der man-Page von "bash" findet man im Abschnitt "INVOCATION" den folgenden Abschnitt:
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists.
After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.
The --noprofile option may be used when the shell is started to inhibit this behavior.
[ Hinweis: Das Zeichen "Tilde" ("~") ist eine Kurzform für "
$HOME
". ]
Man erweitert also eine der Dateien "$HOME/.bash_profile
", "$HOME/.bash_login
" oder "$HOME/.profile
" (in dieser Reihenfolge) an "geeigneter" Stelle.
Wenn noch keine dieser Dateien existiert, sollte man "$HOME/.bash_profile
" anlegen.
Die betreffende Datei erweitert man um das folgende Kommando:
# Achtung: Der Backslash ("\") muss am Zeilenende stehen. expr match "$PATH" ".*/Overlay:" > /dev/null \ || export PATH="$HOME/bin/Overlay:$PATH"
Durch dieses Kommando erfolgt die Erweiterung von "$PATH
" mittels "export PATH=...
" nur dann, wenn der String "/Overlay:
" noch nicht in "$PATH
" vorkommt.
Dadurch kann man das Kommando auch problemlos mehrfach ausführen; der Kommando-Suchpfad wird nur einmal erweitert.
Als Folge kann man das Kommando auch in mehrere Shell-Profiles schreiben (z.B auch in "$HOME/.bashrc"). Dies ist unter bestimmten Umständen evtl. erforderlich (siehe den Abschnitt "INVOCATION" in der man-Page von "bash").
Hinweise bei Verwendung einer anderen Shell:
- Man muss das profile-System der eigenen Shell nutzen.
- Man muss das Kommando zur Erweiterung von "
$PATH
" evtl. an die eigene Shell anpassen.
Erweiterung von "$PATH" in der interaktiven Shell
In der aktuellen interaktiven Shell sollte man auch den Kommando-Suchpfad erweitern: export PATH="$HOME/bin/Overlay:$PATH"
Dies ist aber nur einmal erforderlich; später geschieht dies automatisch beim Anmelden usw.
Jetzt sollte auch das Kommando "php -v
" den Branch "8.2" anzeigen.