[[Vorlage(Getestet, bionic, focal, jammy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor verwenden] [:mit Root-Rechten arbeiten:] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis(2)]] [[Bild(./php-logo.png, 48, align=left)]] [wikipedia:Php: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 [https://secure.php.net/manual/de/intro-whatcando.php Was kann PHP?] {de} im [https://secure.php.net/manual/de/ PHP-Handbuch] {de}. Aus Sicherheitsgründen sollte PHP nur in einer Version eingesetzt werden, die noch vom Hersteller unterstützt wird ([https://www.php.net/supported-versions.php Unterstützte Versionen] {en}). 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-Versionen-installieren 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:LTS-Versionen] von Ubuntu bringen von Haus aus folgende PHP-Versionen mit: * [:Jammy:Ubuntu 22.04]: 8.1.x * [:Focal:Ubuntu 20.04]: 7.4.x * [:Bionic:Ubuntu 18.04]: 7.2.x == 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. {{{#!vorlage Paketinstallation php, main }}} Die Anbindung an Apache kann ansonsten mit folgendem Paket nachinstalliert werden: {{{#!vorlage Paketinstallation libapache2-mod-php , main }}} Hiernach das Modul aktivieren: {{{#!vorlage Befehl 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 [:Serverdienste/#Webserver:Webserver] statt Apache zu nutzen, gibt es zwei Möglichkeiten zur Anbindung: Mit dem Paket '''php-fpm''' installiert man PHP mit dem [https://secure.php.net/manual/de/install.fpm.php PHP-FPM FastCGI Process Manager] {de}, der als [:Dienste: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 [wikipedia:Common_Gateway_Interface:CGI]-Schnittstelle benötigt ein Webserver somit keine tiefer gehende Integration mit PHP. {{{#!vorlage Paketinstallation php-fpm, main }}} 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. {{{#!vorlage Paketinstallation php-cgi, main }}} 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: * [:nginx/PHP:nginx] * [:lighttpd/#PHP:lighttpd] PHP selbst bietet einen [:Instant_Webserver/#PHP:eingebauten Webserver] an, der auch dann funktioniert, wenn nur die [#Installation-fuer-Kommandozeilenprogrammierung 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]: {{{#!vorlage Paketinstallation 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: {{{#!vorlage Befehl php -a }}} == Neuere Versionen installieren == Selbst wenn die aktuellen Ubuntu-Versionen teilweise PHP-Versionen verwenden, die offiziell jeweils ihren „End of Life“ ([wikipedia:End_of_life:EOL]) erreicht haben, werden diese wie bereits erwähnt ständig mittels Rückportierungen ([ubuntu:UbuntuBackports:]) mit sicherheitskritischen Aktualisierungen versorgt. Wer dennoch aktuellere PHP-Versionen nutzen möchte, kann auf die Paketquelle von [launchpad:~ondrej:Ondřej Surý] zurück greifen: [[Vorlage(PPA, ondrej, ubuntu/php)]] Nun kann man die gewünschte PHP-Version installieren, nach dem Muster: {{{#!vorlage Befehl sudo apt install phpVERSION }}} Beispiel für PHP 8.0: {{{#!vorlage Befehl 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. {{{#!vorlage Hinweis Zu installierende [#PHP-Erweiterungen 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 {{{#!vorlage 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:///phpinfo.php aufgerufen aufgerufen wird[3][4]. Dieses Skript gibt wie `php -i` zahlreiche Informationen zur PHP-Installation aus. {{{#!code php }}} Wird ein anderer Webserver verwendet, ist dessen Dokumentation zum richtigen Vorgehen zu konsultieren. {{{#!vorlage Warnung 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 [https://www.php.net/manual/de/configuration.file.php PHP-Konfigurationsdatei] {de} '''php.ini''' findet sich für [#Installation-fuer-Kommandozeilenprogrammierung php-cli] im Verzeichnis '''/etc/php/PHP.VERSION/cli/''' und für die [#Installation-fuer-serverseitige-Programmierung 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''' - [https://pear.php.net/ PEAR] {en} ('''P'''HP '''E'''xtension and '''A'''pplication '''R'''epository), eine Bibliothek von Modulen und Erweiterungen für PHP == Datenbanken == PHP unterstützt zahlreiche [wikipedia:DBMS:Datenbankmanagementsysteme]. Welche Datenbanken unterstützt werden, findet sich im Abschnitt [https://www.php.net/manual/de/refs.database.php Datenbankerweiterungen] {de} in der PHP-Dokumentation. Eine Auswahl der bekanntesten Datenbanken: * '''php-mysql''' für [:MySQL:]. Funktioniert auch für [:MariaDB:]. * '''php-pgsql''' für [:PostgreSQL:] * '''php-sqlite3''' für [:SQLite:] Erwähnenswert im Zusammenhang mit dem Thema Datenbanken ist noch, dass PHP auch mehrere [wikipedia:Datenbankabstraktionsschicht:Datenbankabstraktionssysteme] anbietet, die eine (fast) einheitliche Programmierung ermöglichen, egal welche Datenbank im Hintergrund verwendet wird. Mehr dazu ist in der [https://www.php.net/manual/de/refs.database.abstract.php offiziellen Dokumentation zu finden]. {de} == 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 [wikipedia: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]: {{{#!vorlage Befehl php -v }}} = Links = == 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 == * [https://www.php.net/ Projektseite] {en} * [https://secure.php.net/manual/de/ PHP-Handbuch] {de} * [https://secure.php.net/manual/de/install.general.php Installation > Generelle Überlegungen] {de} * [https://tecadmin.net/install-php-7-on-ubuntu/ How To Install PHP (7.3, 7.2 & 7.0) on Ubuntu 18.04 via PPA] {en} # tag: PHP, Composer, Server, Internet, Netzwerk, LAMP, Datenbank