PHP

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
    1. Installation für serverseitige Programmi...
    2. Installation für Kommandozeilenprogrammi...
    3. 7.2 unter Ubuntu 16.04
  2. Funktionstest
  3. Anbindungen
    1. Apache
    2. MySQL/MariaDB
    3. Andere Datenbanken
  4. PHP-Erweiterungen
    1. Internationalisierung
    2. Paket-Management
  5. Problembehebung
    1. Ermitteln der PHP-Version
  6. Links
    1. Intern
    2. Extern

./php-logo.png PHP ist eine Skriptsprache mit einer an Java bzw. Perl angelehnten Syntax, die häufig zur Erstellung dynamischer Webseiten oder Webanwendungen verwendet wird. Die drei Hauptgebiete, in denen PHP-Skripte genutzt werden, beschreibt die Seite Was kann PHP? 🇩🇪 im PHP-Handbuch 🇩🇪.

Aus Sicherheitsgründen sollte PHP nur in einer Version eingesetzt werden, die noch vom Hersteller unterstützt wird (Unterstützte Versionen 🇬🇧). Dabei ist zu berücksichtigen, dass insbesondere ältere PHP-Skripte mittlerweile nicht mehr unterstützte Sprachfeatures verwenden. Gerade bei öffentlich erreichbaren Webanwendungen sollte hier die Portierung auf eine neuere PHP-Version anstelle des Weiterbetriebs einer alten Version im Vordergrund stehen.

Installation

In den offiziellen Paketquellen ist nicht immer die aktuellste PHP-Version enthalten, wobei sicherheitsrelevante Aktualisierungen im Rahmen der Paketpflege in der Regel rückportiert werden. Die LTS-Versionen von Ubuntu bringen von Haus aus folgende PHP-Versionen mit:

Installation für serverseitige Programmierung

Ubuntu bietet für die Installation von PHP zum Einsatz mit Webservern drei unterschiedliche Pakete an, die verschiedene Anwendungsfälle abdecken. In jedem Fall werden auch die notwendigen Programme für die weiter unten beschriebene Kommandozeilenprogrammierung installiert.

Mit dem Paket php-fpm installiert man PHP mit dem PHP-FPM FastCGI Process Manager 🇩🇪, der als Dienst läuft und mehrere eigenständige PHP-Instanzen starten und verwalten kann, um Anfragen von externen Programmen (z.B. Webserver) entgegenzunehmen. Vegleichbar mit der CGI-Schnittstelle benötigt ein Webserver somit keine tiefer gehende Integration mit PHP.

Das Paket php-cgi stellt PHP direkt in einer Form bereit, die zur vorgenannten CGI-Schnittstelle kompatibel ist. Der Hauptunterschied zum neueren FPM besteht darin, dass bei der Verwendung via CGI bei jedem Seitenaufruf ein neuer PHP-Prozess gestartet und nach der Verarbeitung wieder beendet wird, was zu einer verhältnismäßig geringen Performance führen kann. Die Empfehlung geht daher in Richtung FPM.

Als drittes Paket gibt es noch das Apache-Modul libapache2-mod-php. Dieses Paket integriert PHP auf Programmebene in den Webserver Apache, was einerseits den Vorteil hat, dass PHP direkt im Webserver verarbeitet werden kann, andererseits jedoch den Nachteil, dass in einer Serverinstanz nicht mehrere unterschiedliche PHP-Instanzen (z.B. wegen unterschiedlicher Versionen oder Konfigurationen) realisiert werden können, wie bei den bereits beschriebenen Installationsvarianten. Die Installation dieses Pakets bringt über seine Abhängigkeiten auch den eigentlichen Apache-Webserver mit.

Hinweis:

Die Installation von PHP über das Metapaket php hat unter Ubuntu 16.04 und 18.04 unterschiedliche Auswirkungen. Aufgrund der Reihenfolge der Abhängigkeiten wird unter 16.04 PHP mit dem FPM installiert, während 18.04 es vorzieht, den Webserver Apache mit PHP-Modul aufzuspielen.

Installation von PHP mit der Standardauswahl für die aktuell betriebene Ubuntu-Version:

Paketliste zum Kopieren:

sudo apt-get install php 

Oder mit apturl die Pakete installieren. Link: apt://php

Installation für Kommandozeilenprogrammierung

Wer PHP nicht für den Betrieb im Zusammenhang mit Webservern einsetzen will und einen kleineren Installationsumfang wünscht, kann auch nur die Kommandozeilentools installieren:

Paketliste zum Kopieren:

sudo apt-get install php-cli 

Oder mit apturl die Pakete installieren. Link: apt://php-cli

7.2 unter Ubuntu 16.04

Obwohl PHP 7.0 bereits Anfang 2019 offiziell seinen „End of Life“ (EOL) erreicht hat, also nicht mehr mit Sicherheitsupdates versorgt wird, wird 7.0 unter Ubuntu 16.04 wie bereits erwähnt ständig mittels Rückportierungen (UbuntuBackports) mit sicherheitskritischen Aktualisierungen versorgt. Wer dennoch PHP 7.2 unter Ubuntu 16.04 nutzen möchte, kann auf die Paketquelle von Ondřej Surý zurück greifen.

Adresszeile zum Hinzufügen des PPAs:

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams ondrej zu entnehmen.

Damit Pakete aus dem PPA genutzt werden können, müssen die Paketquellen neu eingelesen werden.

Nun kann PHP 7.2 mit folgenden Paketen installiert werden.

Für die serverseitige Programmierung

  • php7.2

Paketliste zum Kopieren:

sudo apt-get install php7.2 

Oder mit apturl die Pakete installieren. Link: apt://php7.2

Für die Kommandozeilenprogrammierung

  • php7.2-cli

Paketliste zum Kopieren:

sudo apt-get install php7.2-cli 

Oder mit apturl die Pakete installieren. Link: apt://php7.2-cli

Funktionstest

Die Funktionsfähigkeit von PHP als Kommandozeilenwerkzeug lässt sich direkt nach der Installation zum Beispiel mit dem Befehl

php -i 

überprüfen, der bereits einige Informationen zur PHP-Installation ausgeben sollte.

Unter der Voraussetzung, dass PHP als Apache-Modul installiert wurde, lässt sich der Betrieb von PHP im Webserver damit testen, dass der folgende Code als /var/www/html/phpinfo.php abgespeichert und der URL http://<Server-Name-oder-IP>/phpinfo.php aufgerufen aufgerufen wird. Dieses Skript gibt wie php -i zahlreiche Informationen zur PHP-Installation aus.

1
2
3
<?php
phpinfo();
?>

Wird ein anderer Webserver verwendet, ist dessen Dokumentation zum richtigen Vorgehen zu konsultieren.

Achtung!

Das PHP-Skript phpinfo.php sollte nach dem ersten Test sofort entfernt oder durch andere Maßnahmen vor unbefugtem Zugriff geschützt werden, damit potentielle Angreifer keine wertvollen Informationen über das System erhalten.

Anbindungen

Apache

Bei der Installation von PHP für serverseitige Programmierung wird das passende Modul für den Webserver Apache normalerweise mit installiert. Fehlt dieses, so kann man das Paket libapache2-mod-php nachinstallieren. Ab Ubuntu 16.04 ist die Nachinstallation immer notwendig.

Wenn nach der Installation von Apache und PHP die PHP-Dateien nicht ausgeführt, sondern nur heruntergeladen werden, kann es sein, dass das Apache-Modul nicht richtig aktiviert wurde. Weitere Informationen hierzu findet man im Artikel Apache/Module.

MySQL/MariaDB

Als Datenquelle für viele PHP-Skripte dienen Datenbanken. Zusammen mit Apache und PHP macht das dann einen LAMP-Server (Linux, Apache, MySQL und PHP). Die Anbindung an MySQL kann über die Pakete php-mysql installiert werden. Die MySQL-Alternative MariaDB lässt sich ebenso mit den Datenbanktreibern für MySQL ansprechen.

Andere Datenbanken

PHP unterstützt neben MySQL/MariaDB weitere Datenbankmanagementsysteme, wie beispielsweise PostgreSQL, für das der passende Treiber im Paket php-pgsql zu finden ist. Welche Datenbanken noch unterstützt werden, findet sich im Abschnitt Datenbankerweiterungen 🇩🇪 in der PHP-Dokumentation.

PHP-Erweiterungen

Es gibt zahlreiche nützliche Erweiterungen für PHP, die zusätzlich installiert werden können. Hier eine unvollständige Auswahl:

Internationalisierung

Die "intl"-Erweiterung 🇬🇧 von PHP ermöglicht es Entwicklern, Aufgabenstellungen, deren Ausgabe sich in verschiedenen Sprachen, oder genauer gesagt in Gebietsschemas, unterscheidet, zu automatisieren. Mit ihr kann man zum Beispiel die in der deutschen Sprache üblichen Formatierungen für Kalender- und Zeitangaben, Dezimalzahlen und Währungsangaben korrekt ausgeben lassen. (Siehe auch: i18n.)

Installation

Die Installation der "intl"-Erweiterung erfolgt mit folgendem Paket:

  • php-intl (universe)

Paketliste zum Kopieren:

sudo apt-get install php-intl 

Oder mit apturl die Pakete installieren. Link: apt://php-intl

Anwendung

PHP unterstützt alle Gebietsschemas, deren Sprachpakete unter Ubuntu zuvor installiert worden sind. Die Anwendung in PHP funktioniert nur, wenn man den exakten Sprachpaketnamen verwendet, den auch Ubuntu verwendet. Die im System installierten Sprachpakete und ihre Bezeichnungen erfährt man durch die Eingabe im Terminal [2] von:

locale -a 

Für das Gebietsschema Deutschland lautet die Bezeichnung dann zum Beispiel:

de_DE.UTF-8

In einem Skript

In einer beliebigen PHP-Datei kann man nun den gewünschten Sprachpaketnamen verwenden, zum Beispiel so:

1
2
<?php
setlocale (LC_ALL,'de_DE.UTF-8');

Systemweit

Möchte man ein Gebietsschema als Standard für die gesamte PHP-Installation festlegen, so kann man dies in der PHP-Konfigurationsdatei 🇩🇪 festlegen. Hierfür in der Datei /etc/php/7.2/apache2/php.ini im Bereich:

1
[intl]

folgenden Eintrag hinzufügen, beziehungsweise die Auskommentierungen entfernen:

1
intl.default_locale = GEWÜNSCHTES_GEBIETSSCHEMA

Für Deutschland sähe der entsprechende Eintrag in der php.ini also wie folgt aus:

1
2
[intl]
intl.default_locale = de_DE.UTF-8

Damit diese Änderungen wirksam werden, müssen sie dem Apache-Server bekannt gemacht werden, zum Beispiel so:

sudo service apache2 reload 

Paket-Management

Für PHP gibt es zahlreiche Lösungen und Bibliotheken, die ein Entwickler in sein Projekt einbinden kann. Mit dem zuvor genannten PEAR lassen sich viele Erweiterungen bereitstellen, allerdings nur systemweit. Mittlerweile gilt als De-Facto-Standard für die Paketverwaltung Composer. Er bringt das Management von Paketen und deren Abhängigkeiten auf die Ebene einzelner Projekte, wodurch es unter anderem möglich ist, Versionskonflikten vorzubeugen.

Problembehebung

Ermitteln der PHP-Version

Die installierte PHP-Version lässt sich durch die folgende Eingabe in einem Terminal ermitteln:

php -v 

Intern

Extern