staging.inyokaproject.org

PHP

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


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

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

Apache

Installiert man einfach nur das Paket php, so wird der Webserver Apache mitinstalliert und eine sofort lauffähige Apache-PHP-Umgebung geschaffen.

  • php (main)

Befehl zum Installieren der Pakete:

sudo apt-get install php 

Oder mit apturl installieren, Link: apt://php

Die Anbindung an Apache kann ansonsten mit folgendem Paket nachinstalliert werden:

  • libapache2-mod-php (main)

Befehl zum Installieren der Pakete:

sudo apt-get install libapache2-mod-php  

Oder mit apturl installieren, Link: apt://libapache2-mod-php

Hiernach das Modul aktivieren:

sudo a2enmod php 

Ja nach lokaler Installation muss bei diesen beiden Befehlen womöglich noch die PHP-Version mit angehängt werden.

Jetzt noch den Apache-Server neu laden, damit die Änderungen wirksam werden.

Andere Webserver

Um PHP mit einem anderen Webserver statt Apache zu nutzen, gibt es zwei Möglichkeiten zur Anbindung:

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. Vergleichbar mit der CGI-Schnittstelle benötigt ein Webserver somit keine tiefer gehende Integration mit PHP.

  • php-fpm (main)

Befehl zum Installieren der Pakete:

sudo apt-get install php-fpm 

Oder mit apturl installieren, Link: apt://php-fpm

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.

  • php-cgi (main)

Befehl zum Installieren der Pakete:

sudo apt-get install php-cgi 

Oder mit apturl installieren, Link: apt://php-cgi

PHP wird von praktisch allen gängigen Webservern unterstützt. Wie man die Einbindung einrichtet, findet man in der Dokumentation des jeweiligen Webservers, oder auch für folgende Server hier in der Wiki:

PHP selbst bietet einen eingebauten Webserver an, der auch dann funktioniert, wenn nur die Kommandozeilenedition von PHP installiert wurde. Dieser sollte aus Sicherheitsgründen nicht von außen erreichbar sein und nur für Testzwecke verwendet werden!

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[1]:

  • php-cli

Befehl zum Installieren der Pakete:

sudo apt-get install php-cli 

Oder mit apturl installieren, Link: apt://php-cli

Auf der Konsole können PHP-Dateien mit php DATEINAME.php ausgeführt werden. Es gibt auch eine interaktive Konsole, in der man direkt PHP-Code eingeben kann. Gestartet wird sie mit:

php -a 

Neuere Versionen installieren

Selbst wenn die aktuellen Ubuntu-Versionen teilweise PHP-Versionen verwenden, die offiziell jeweils ihren „End of Life“ (EOL) erreicht haben, werden diese wie bereits erwähnt ständig mittels Rückportierungen (UbuntuBackports) mit sicherheitskritischen Aktualisierungen versorgt.

Wer dennoch aktuellere PHP-Versionen nutzen möchte, kann auf die Paketquelle von Ondřej Surý zurück greifen:

Adresszeile zum Hinzufügen des PPAs:

  • ppa:ondrej/ubuntu/php

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.

Nun kann man die gewünschte PHP-Version installieren, nach dem Muster:

sudo apt install phpVERSION 

Beispiel für PHP 8.0:

sudo apt install php8.0 

Beim Gebrauch mit Apache muss womöglich auch das PHP-Modul entsprechend aktualisiert werden. Dazu das der PHP-Version entsprechende Modul zunächst installieren, zum Beispiel sudo apt-get install libapache2-mod-php8.1. Danach das alte PHP-Modul deaktivieren und das neue aktivieren. Nach einem Neuladen (Reload) des Apache-Servers sollte nun die neu installierte PHP-Version verfügbar sein.

Hinweis:

Zu installierende PHP-Erweiterungen müssen, wenn man diese Paketquelle benutzt, mit der installierten PHP-Version angegeben werden, zum Beispiel sudo apt install php8.0-intl. Ansonsten wird nicht nur die Erweiterung aus den Ubuntu-eigenen Paketquellen installiert (main), es wird auch PHP komplett neu aus den Ubuntu-Paketquellen installiert!

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[2].

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[3][4]. 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[5], damit potentielle Angreifer keine wertvollen Informationen über das System erhalten.

Konfiguration

Die PHP-Konfigurationsdatei 🇩🇪 php.ini findet sich für php-cli im Verzeichnis /etc/php/PHP.VERSION/cli/ und für die serverseitige Programmierung mit Apache im Verzeichnis /etc/php/PHP.VERSION/apache2/. Es empfiehlt sich, Änderungen nicht direkt dort vorzunehmen, sondern im jeweiligen Unterverzeichnis conf.d/ eine neue Datei mit der gewünschten Konfiguration zu erstellen. Dadurch wird vermieden, dass bei einem Update von PHP die eigenen Einstellungen überschrieben werden. Alle ini-Dateien werden nacheinander „abgearbeitet“ und überschreiben jeweils die vorherigen Einstellungen. Deshalb beginnen dort die meisten Dateinamen mit einer Ziffer. Eigene ini-Dateien sollte man, damit sie auch wirklich wirksam werden, am besten durch die höchsten Ziffer am Beginn des Dateinamens priorisieren.

PHP-Erweiterungen und Anbindungen

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

  • php-cgi - CGI-Skripte ausführen (vgl. zum bereits oben erwähnten php-fpm)

  • php-curl - cURL-Unterstützung (Dateien über verschiedene Protokolle übertragen)

  • php-gd - Bilder generieren und manipulieren

  • php-imagick (universe) - Bilder per ImageMagick manipulieren.

  • php-imap (universe) - IMAP-Unterstützung.

  • php-pear - PEAR 🇬🇧 (PHP Extension and Application Repository), eine Bibliothek von Modulen und Erweiterungen für PHP

Datenbanken

PHP unterstützt zahlreiche Datenbankmanagementsysteme. Welche Datenbanken unterstützt werden, findet sich im Abschnitt Datenbankerweiterungen 🇩🇪 in der PHP-Dokumentation. Eine Auswahl der bekanntesten Datenbanken:

Erwähnenswert im Zusammenhang mit dem Thema Datenbanken ist noch, dass PHP auch mehrere Datenbankabstraktionssysteme anbietet, die eine (fast) einheitliche Programmierung ermöglichen, egal welche Datenbank im Hintergrund verwendet wird. Mehr dazu ist in der offiziellen Dokumentation zu finden. 🇩🇪

Internationalisierung

Die Erweiterung php-intl hilft bei der automatisierten Ausgabe von Datums, - Zahlen -und anderen Formatierungen je nach Sprache und Gebietsschema. Näheres hierzu im Unterartikel „PHP/Internationalisierung“.

Paket-Management

Für PHP gibt es zahlreiche Lösungen und Bibliotheken, die ein Entwickler in sein Projekt einbinden kann, zum Beispiel das Webframework Laminas. 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[2]:

php -v 

Intern

  • LAMP - einen LAMP-Server (Linux, Apache, MySQL und PHP) unter Ubuntu installieren

  • Composer - populäres Paketmanagementsystem für PHP

  • Laminas - umfangreiches Framework für PHP

Extern

Diese Revision wurde am 20. Januar 2023 12:37 von mubuntuHH erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Internet, Datenbank, PHP, Composer, LAMP