PHP

PHP ist für das vollständige Funktionieren eines LAMP-Systems eine der Grundvoraussetzungen. Auch auf dem Caipirinha-Server ist PHP installiert, und zwar mit den Paketen:

  • apache2-mod_php5
  • php5
  • php5-bcmath
  • php5-bz2
  • php5-calendar
  • php5-ctype
  • php5-curl
  • php5-dba
  • php5-dom
  • php5-exif
  • php5-fileinfo
  • php5-gd
  • php5-gettext
  • php5-hash
  • php5-iconv
  • php5-imap
  • php5-json
  • php5-mbstring
  • php5-mcrypt
  • php5-mysql
  • php5-openssl
  • php5-pdo
  • php5-pgsql
  • php5-readline
  • php5-snmp
  • php5-sqlite
  • php5-tokenizer
  • php5-xmlreader
  • php5-xmlwriter
  • php5-xsl
  • php5-zip
  • php5-zlib

PHP5 kommt inzwischen mit verschiedenen Konfigurationsdateien. Die für ein LAMP-System wichtige Konfigurationsdatei heisst /etc/php5/apache2/php.ini und ist recht umfangreich. In der Grundkonfiguration ist sie bereits vernünftig konfiguriert. Deschalb sind hier nur noch diejenigen Passagen wieder gegeben, welche von der ursprünglichen Konfiguration abweichen bzw. welche für das LAMP-System auf dem Caipirinha-Server besonders wichtig sind:

max_execution_time     = 21600   ; Maximum execution time of each script, in seconds
max_input_time         = 21600   ; Maximum amount of time each script may spend parsing request data
memory_limit           = 1G      ; Maximum amount of memory a script may consume
error_log              = /var/log/php_errors.log
file_uploads           = On
upload_max_filesize    = 1G
post_max_size          = 1G
default_socket_timeout = 20
mysql.allow_persistent = On
mysql.connect_timeout  = 20
mysql.trace_mode       = On
session.gc_maxlifetime = 3600
date.timezone          = "Europe/Berlin"

Um mit der digitalen Dropbox eine Datei bis zu 1GB über maximal 6h lang hochladen zu können, werden die Werte der Parameter max_execution_time, max_input_time, memory_limit, upload_max_filesize, post_max_size und file_uploads an entsprechende Werte angepasst. Die großzügigen Werte können natürlich nur auf einem wenig benutztem System eingestellt werden. Schon auf einem mäßig belasteten System müsste man die maximale Laufzeit drastisch reduzieren, um zu vermeiden, dass lang laufende PHP-Prozesse das System lähmen.

Mit dem Parameter error_log wird /var/log/php_errors.log als Log-Datei festgelegt. Das Verzeichnis /var/log ist aber nur für den Benutzer root beschreibbar. Deshalb muss man nun noch als Benutzer root folgende Kommandos ausführen:

touch /var/log/php_errors.log
chown wwwrun:www /var/log/php_errors.log

Sonst können die Fehlermeldungen nicht nach /var/log/php_errors.log geschrieben werden und erscheinen statt dessen in var/log/apache2/error_log zusammen mit den Apache-Fehlermeldungen.

Der Parameter default_socket_timeout wird gegenüber der Default-Einstellung sogar reduziert, weil wir bei einem schwach belasteten System von einer schnellen Reaktion ausgehen können.

Die Parameter mysql.allow_persistent, mysql.connect_timeout und mysql.trace_mode dienen der Anpassung an MySQL auf dem Caipirinha-Server.

Mit dem Parameter date.timezone wird die Ortszeit festgelegt. Im Caipirinha-Server läuft die Uhr auf UTC-Zeit (siehe NTP), und mit diesem Parameter wird dann bei Verwendung der PHP-Funktion date() die korrekte Ortszeit ausgegeben.

Mit Session-Cookies kann man eine “Sitzung” erzeugen, wie sie beispielsweise für Online-Shops erforderlich ist. Damit können dann entfernte Benutzer auf einer HTML-Seite Daten “speichern” (die in Wirklichkeit auf dem Server abgelegt werden) und auf diese Daten auf einer anderen HTML-Seite zugreifen. Damit die auf dem Server gespeicherten Daten eindeutig einer Sitzung zugeordnet werden können, wird im Browser des Benutzers ein “Session Cookie” abgelegt, welches die Sitzung eindeutig identifiziert. Mit dem Parameter session.gc_maxlifetime wird die Lebensdauer eines solchen Session Cookies festgelegt, in diesem Fall auf 1h. Dies ist im Allgemeinen mehr als ausreichend, selbst für eine zwischengschaltete Mittagspause. Viele kommerzielle Seiten haben aus Sicherheitsgründen viel kürzere Lebensdauern.

Es ist nicht erforderlich, dass PHP “gestartet” wird. Wenn der entsprechend konfigurierte Webserver Apache auf eine PHP-Seite stößt, dann wird der PHP-Interpreter aktiviert und arbeitet entsprechend seiner eingestellten Konfiguration. Nach Änderungen an der Datei /etc/php5/apache2/php.ini muss allerdings ein /etc/init.d/apache reload oder ein /etc/init.d/apache restart durchgeführt werden.

Neben der eben besprochnen Konfigurationsdatei gibt es noch eine entsprechende Datei namens /etc/php5/cli/php.ini, welche für die Ausführung von PHP-Skripen in der Shell zuständig ist. Man kann auch in einer Shell mit dem Kommando php skript.php ausführen. Das Skript wird dann ebenfalls vom Apache-Server ausgeführt, sendet alle seine Ausgaben allerdings an die Shell. Dies macht Sinn für Algorithmen, welche Programmpakete aktualisieren oder sonstige Berechnungen durchführen und deren Ergebnisse nicht im Browser dargestellt werden sollen. Da der Anwendungsfall somit anders liegt, sollen deswegen auch unterschiedliche Werte eingestellt werden. Deshalb konfigurieren wir in /etc/php5/cli/php.ini folgende Werte unterschiedlich zur Standard-Konfiguration:

max_execution_time     = 600
memory_limit           = 1G
error_log              = /var/log/php_errors.log
default_socket_timeout = 20
mysql.connect_timeout  = 20
mysql.trace_mode       = On
date.timezone          = "Europe/Berlin"

Ich habe den Wert für memory_limit hier so hoch gewählt, weil ich für ein Projektmanagement-System manchmal an Skripten arbeite, welche sehr viele Daten verarbeiten und große Grafiken berechnen. Ansonsten braucht man natürlich viel kleinere Werte.

Posted on: 2010-08-09Gabriel Rüeck