PHP in der Webhosting-Umgebung

In der Webhosting-Umgebung des LRZ stehen PHP und eine optionale MySQL-Datenbank zur Verfügung.  Dies emöglicht den Betrieb von vielen Web-Anwendungen (s.u.).



Aktuelles

 

Änderung der Standard-Version von PHP 8.0 zu PHP 8.1

Die von uns bereitgestellte Software PHP 8.0 erhält keine Sicherheitsupdates mehr. Darum werden wir alle Sites, die derzeit noch mit PHP 8.0 laufen, auf PHP 8.1 umstellen.

Zeitpunkt der Umstellung: Dienstag, 5. Dezember 2023, vormittags

Dies bedeutet für Sie: Prüfen Sie die von Ihnen verwendete Web-Anwendung und upgraden Sie diese gegebenenfalls auf eine mit PHP 8.1 kompatible Version. Andernfalls wird Ihr Webauftritt ab dem 5. Dezember 2023 unter Umständen nicht mehr wie gewohnt funktionieren. Wenn Sie die Anwendung selbst programmieren, nutzen Sie den Migrations-Leitfaden.

Wenn Ihre Site bereits mit PHP 8.1 oder einer höheren Version läuft, sind Sie von dieser Information nicht betroffen.

 

Auf den Zugangsmaschinen (webdev02…) gibt es jetzt eine zentrale Composer-Installation – /usr/local/bin/composer.
Wir aktualisieren sie normalerweise ein paar Tage nach einem Release. Wenn Sie eine bestimmte / ältere Version benötigen, können Sie sie weiterhin in Ihrem Server-Verzeichnis installieren.

 

Die PHP-Versionen 8.1 und 8.2 sind jetzt im Standard-Hosting verfügbar. Um Ihre Site umzustellen brauchen wir ein authentifiziertes Ticket (Self Service) mit der Angabe der gewünschten PHP-Version und natürlich der Angabe, um welche Site es sich handelt.


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:

Falls die von Ihnen gesuchte PHP-Anwendung nicht zu diesen Beispielen gehört, gehen Sie bitte folgendermaßen vor:

PHP-Umgebung

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).

Installierte PHP-Branches
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.

Genaue Version des PHP-Interpreters
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.

Erzeugung des neuen "php"
# 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:

Erweiterung von "$PATH"
# 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.