PHP: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
(Artikel erstellt, Installation der Pakete (nicht Einrichtung der Webserver),)
 
K (Link zum französischen Wiki (LAMP) war 404, für "PHP" verfügbare Sprachfassungen von der englischen Wiki-Seite übernommen. Warum Kategorie:Server?)
 
(15 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Unvollständig}}
[http://de.php.net PHP] ist eine imperative Programmiersprache zur serverseitigen Webprogrammierung, die (seit Version 5) auch Objektorientierung beherrscht. PHP steht für ''PHP: Hypertext Processor''. Mit [http://gtk.php.net PHP-GTK] besteht außerdem die Möglichkeit, grafische Desktopanwendungen zu erstellen. Meist wird PHP in Kombination mit einem Webserver verwendet, um gescriptete (dynamische) Seiten bereitzustellen.


[http://de.php.net PHP] ist eine imperative Programmiersprache zur serverseitigen Webprogrammierung, die auch (seit Version 5) Objektorientierung beherrscht. PHP steht für ''PHP: Hypertext Processor''. Mit [http://gtk.php.net PHP-GTK] besteht außerdem die möglichkeit, grafische Desktopanwendungen zu erstellen. Meist wird PHP in Kombination mit Apaches httpd und MySQL eingesetzt.
{{installation|name=PHP|repo=extra|paket=php}}


== Installation ==
Wichtige/Häufig verwendete PHP-Module:


PHP selbst befindet sich wie alle hier genannten Pakete im [[Pacman#Repositorien_und_Spiegel-Server | extra-Repositorium]] und wird mit dem folgendem Befehl installiert:
* '''php-gd''' - Schnittstelle zur GD-Grafikbibliothek.
* '''php-mcrypt''' - MCrypt-Modul
* '''php-odbc''' - ODBC-Datenbankmodul
* '''php-sqlite''' - Modul zur Verwendung von SQLite3-Datenbanken
* '''php-ldap''' - Zum Abfragen eines LDAP-Verzeichnisservers
* '''php-mssql''' - Kontakt zu MS-SQL-Server-Datenbanken aufnehmen


pacman -S php
== Betrieb mit einem Webserver ==
Will man PHP mit einem Webserver verwenden, müssen entsprechende Schnittstellen installiert werden. Empfohlen wird aus Geschwindigkeitsgründen FastCGI, auch beim Apache, für den zwar eine SAPI existiert; diese ist jedoch langsamer als FCGI. '''Auf jeden Fall FCGI nehmen, und nicht das veraltete und sehr langsame CGI!'''


pacman -S php-cgi      # FCGI für Apache, lighttpd, nginx, etc.
pacman -S php-apache  # SAPI für den Apache httpd (allerdings langsamer als FCGI mittels php-cgi)


Die Apache-Schnittstelle kann mittels folgendem Befehl installiert werden:
In Produktivumgebungen und vor allem bei hochfrequentierten Seiten sollte ''php-fpm'' anstelle des normalen FCGI genutzt werden. Siehe dazu auch die [http://php-fpm.org/ Projektwebseite].


  pacman -S php-apache
  pacman -S php-fpm      # FastCGI Process Manager (Alternative zum Standard-FCGI)


Um PHP mit nginx oder lighttpd zu betreiben ist die fcgi-Varianten erforderlich:
Details zur Konfiguration der Webserver finden sich hier im Wiki (Links am Ende des Artikels).


pacman -S php-cgi
=== Testen ===
[[Bild:Phpinfo_in_firefox.png|thumb|Ausgabe von {{ic|phpinfo();}} in [[Firefox]]]]
Testweise kann man nun im Dokumenten-Wurzelverzeichnis eine Datei {{ic|test.php}} anlegen, und {{ic|<?php phpinfo(); ?>}} hineinschreiben. Dies ist eine PHP-Informationsfunktion. Beim Aufruf der Seite über <nowiki>http://127.0.0.1/test.php</nowiki> erscheint eine Übersicht darüber, was der Server kann, und wie er konfiguriert wurde.


Die wichtigsten Module sind im folgenden aufgelistet:
In dem Dokument erhält man Informationen über die PHP-Installation, MySQL, den Webserver, und das System, auf dem der Server läuft.


* '''php-gd''' - Schnittstelle zur GD-Grafikbibliothek. Wird von sehr vielen Anwendungen benötigt.
Diese Datei sollte man auf einem öffentlich erreichbaren Produktivsystem nicht zugänglich lassen, da die verwendete PHP-Funktion einem Angreifer viele Informationen über das System zugänglich macht.
* '''php-pear''' - PEAR (PHP Extension and Application Repository
 
* '''php-mcrypt''' - MCrypt-Modul
== Integrierter Testserver ==
* '''php-odbc''' - ODBC-Datenbankmodul
PHP besitzt einen integrierten, simplen HTTP-Server zum lokalen Testen und Entwickeln von PHP-Programmen. Dieser sollte nicht zum Anbieten von Webseiten benutzt werden, sondern tatsächlich nur als Testserver, da er über keinerlei sicherheitsrelevanten Funktionen verfügt. Zum Starten des Testservers wechselt man entweder in das Hauptverzeichnis der zu testenden PHP-Anwendung und startet dort den Server, oder übergibt den Pfad der PHP-Anwendung die man testen möchte.
* '''php-sqlite''' - Modul zur Verwendung von SQLite3-Datenbanken
 
* '''php-ldap''' - Zum Abfragen eines LDAP-Verzeichnisservers
# Entweder ...
* '''php-mssql''' - Kontakt zu MS SQL Server-Datenbanken aufnehmen
cd test_app/
php -S localhost:8000
# ... oder
php -S localhost:8000 -t test_app/
 
Der Server wird nun gestartet, und lauscht auf dem angegebenen Port. Statt {{ic|localhost}} kann man auch den Hostnamen des Systems verwenden (genau genommen kann man jeden Namen verwenden, der per DNS auf die Maschine verweist, auf der man den Testserver gestartet hat).
 
Wenn man nun {{ic|<nowiki>http://localhost:8000</nowiki>}} im Webbrowser aufruft, wird die PHP-Anwendung ausgeführt. Im Konsolenfenster kann man die Meldungen des Servers, sowie eventuell auftretende PHP-Fehlermeldungen sehen.


== Konfiguration ==
== Konfiguration ==
Konfiguriert wird PHP über die Datei /etc/php/php.ini.
Wichtige Einstellungen sind (nach Abschnitten geordnet):
{| class="wikitable"
|-
! Sektion !! Name                                          !! Beschreibung
|-
| rowspan=3 | [PHP]  ||  open_basedir  || Alle Datei-Operationen (also Lesen und Schreiben) sind nur innerhalb dieser Verzeichnisse möglich. Beispiel: /srv/http/:/tmp/
|-
| display_errors || Fehlermeldungen anzeigen (Wert: Off oder On)
|-
| extension || Erweiterungen aktivieren. Beispiel:<br/>
extension=gd.so<br/>
extension=gettext.so<br/>
extension=ldap.so
|-
| [Date]  || date.timezone || Zeitzone für die date-Funktionen. Also zum Beispiel "Europe/Berlin"
|-
| [Session] || session.use_cookies || Sollen zum Speichern einer Sitzung Cookies genutzt werden? (1 entspricht ja, 0 somit nein) Wenn keine Cookies genutzt werden, wird der GET-Parameter PHPSESSID an jede URL angehängt.
|}
== Siehe auch ==
* [[Lighttpd#MySQL_und_PHP|lighttpd und PHP]]
* [[Apache und PHP]]


Konfiguriert wird PHP über die Datei /etc/php/php.ini.
== Weblinks ==
* [https://www.php.net/manual/en/features.commandline.webserver.php Details zum Integrierten Testserver] {Sprache|en}


== Todo ==
[[Kategorie:Server]]
* Einrichtung der Webserver (Apache, nginx, lighttpd)
[[Category:Programmiersprache]]
* Wichtige php.ini-Einstellungen
[[de:PHP]]
* Testen der Konfiguration
[[es:PHP]]
[[ja:PHP]]

Aktuelle Version vom 3. Januar 2023, 14:31 Uhr

PHP ist eine imperative Programmiersprache zur serverseitigen Webprogrammierung, die (seit Version 5) auch Objektorientierung beherrscht. PHP steht für PHP: Hypertext Processor. Mit PHP-GTK besteht außerdem die Möglichkeit, grafische Desktopanwendungen zu erstellen. Meist wird PHP in Kombination mit einem Webserver verwendet, um gescriptete (dynamische) Seiten bereitzustellen.

Installation

PHP ist als php in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S php

Wichtige/Häufig verwendete PHP-Module:

  • php-gd - Schnittstelle zur GD-Grafikbibliothek.
  • php-mcrypt - MCrypt-Modul
  • php-odbc - ODBC-Datenbankmodul
  • php-sqlite - Modul zur Verwendung von SQLite3-Datenbanken
  • php-ldap - Zum Abfragen eines LDAP-Verzeichnisservers
  • php-mssql - Kontakt zu MS-SQL-Server-Datenbanken aufnehmen

Betrieb mit einem Webserver

Will man PHP mit einem Webserver verwenden, müssen entsprechende Schnittstellen installiert werden. Empfohlen wird aus Geschwindigkeitsgründen FastCGI, auch beim Apache, für den zwar eine SAPI existiert; diese ist jedoch langsamer als FCGI. Auf jeden Fall FCGI nehmen, und nicht das veraltete und sehr langsame CGI!

pacman -S php-cgi      # FCGI für Apache, lighttpd, nginx, etc.
pacman -S php-apache   # SAPI für den Apache httpd (allerdings langsamer als FCGI mittels php-cgi)

In Produktivumgebungen und vor allem bei hochfrequentierten Seiten sollte php-fpm anstelle des normalen FCGI genutzt werden. Siehe dazu auch die Projektwebseite.

pacman -S php-fpm      # FastCGI Process Manager (Alternative zum Standard-FCGI)

Details zur Konfiguration der Webserver finden sich hier im Wiki (Links am Ende des Artikels).

Testen

Ausgabe von phpinfo(); in Firefox

Testweise kann man nun im Dokumenten-Wurzelverzeichnis eine Datei test.php anlegen, und <?php phpinfo(); ?> hineinschreiben. Dies ist eine PHP-Informationsfunktion. Beim Aufruf der Seite über http://127.0.0.1/test.php erscheint eine Übersicht darüber, was der Server kann, und wie er konfiguriert wurde.

In dem Dokument erhält man Informationen über die PHP-Installation, MySQL, den Webserver, und das System, auf dem der Server läuft.

Diese Datei sollte man auf einem öffentlich erreichbaren Produktivsystem nicht zugänglich lassen, da die verwendete PHP-Funktion einem Angreifer viele Informationen über das System zugänglich macht.

Integrierter Testserver

PHP besitzt einen integrierten, simplen HTTP-Server zum lokalen Testen und Entwickeln von PHP-Programmen. Dieser sollte nicht zum Anbieten von Webseiten benutzt werden, sondern tatsächlich nur als Testserver, da er über keinerlei sicherheitsrelevanten Funktionen verfügt. Zum Starten des Testservers wechselt man entweder in das Hauptverzeichnis der zu testenden PHP-Anwendung und startet dort den Server, oder übergibt den Pfad der PHP-Anwendung die man testen möchte.

# Entweder ...
cd test_app/
php -S localhost:8000

# ... oder
php -S localhost:8000 -t test_app/

Der Server wird nun gestartet, und lauscht auf dem angegebenen Port. Statt localhost kann man auch den Hostnamen des Systems verwenden (genau genommen kann man jeden Namen verwenden, der per DNS auf die Maschine verweist, auf der man den Testserver gestartet hat).

Wenn man nun http://localhost:8000 im Webbrowser aufruft, wird die PHP-Anwendung ausgeführt. Im Konsolenfenster kann man die Meldungen des Servers, sowie eventuell auftretende PHP-Fehlermeldungen sehen.

Konfiguration

Konfiguriert wird PHP über die Datei /etc/php/php.ini.

Wichtige Einstellungen sind (nach Abschnitten geordnet):

Sektion Name Beschreibung
[PHP] open_basedir Alle Datei-Operationen (also Lesen und Schreiben) sind nur innerhalb dieser Verzeichnisse möglich. Beispiel: /srv/http/:/tmp/
display_errors Fehlermeldungen anzeigen (Wert: Off oder On)
extension Erweiterungen aktivieren. Beispiel:
extension=gd.so
extension=gettext.so
extension=ldap.so
[Date] date.timezone Zeitzone für die date-Funktionen. Also zum Beispiel "Europe/Berlin"
[Session] session.use_cookies Sollen zum Speichern einer Sitzung Cookies genutzt werden? (1 entspricht ja, 0 somit nein) Wenn keine Cookies genutzt werden, wird der GET-Parameter PHPSESSID an jede URL angehängt.

Siehe auch

Weblinks