|
Frei verfügbare auf PHP basierende Scripte aus dem Open Source Lager wie das Content Management System Mambo, das Shopsystem OsCommerce oder die Umfrage-Software OpenSurveyPilot setzen gewisse Einstellungen wie ein deaktivierter "Safe Mode" oder aktivierte "Register Globals" voraus, damit sie funktionieren bzw. mit dem vollen Funktionsumfang nutzbar sind. Besitzer eines Virtual Servers oder gar eines Root Servers können diese Einstellungen entweder global für den den ganzen Webserver oder separat für einzelne Accounts selbst vornehmen.
Verfügbare Einstellungen
Das deutsche PHP Handbuch bietet
einen Überblick über die verfügbaren
Optionen zur Konfiguration von PHP. Die aktuellen Einstellungen lassen sich
leicht übersichtlich mit dem folgenden kurzen PHP-Script ausgeben:
<?
phpinfo();
?>
Im Browser aufgerufen sieht die Ausgabe des Scripts in etwa so aus: 
Konfiguration via php.ini, .htaccess oder httpd.conf
PHP-Einstellungen können global als serverweite Einstellung über
die Datei php.ini vorgenommen werden, pro Virtual Host über die httpd.conf
Datei bzw. eine eingebundene Konfigurationsdatei wie die vhost.conf Dateien
von Plesk bzw. pro Verzeichnis über eine .htaccess Datei.
Nicht alle Einstellungen können jedoch überall vorgenommen werden.
Manche Einstellungen lassen sich lediglich über die Datei php.ini bzw.
die Definition des VHost definieren. Andere lassen sich für jedes Verzeichnis
separat definieren und manche Einstellungen können überall vorgenommen
werden:
| Konstante |
Wert |
Bedeutung |
| PHP_INI_USER |
1 |
Der Eintrag kann in Skripten von Benutzern oder der Windows
Registry gesetzt werden |
| PHP_INI_PERDIR |
2 |
Der Eintrag kann in php.ini, .htaccess oder httpd.conf
gesetzt werden |
| PHP_INI_SYSTEM |
4 |
Der Eintrag kann in php.ini oder httpd.conf gesetzt
werden |
| PHP_INI_ALL |
7 |
Der Eintrag kann überall gesetzt werden |
Auf der offiziellen Seite von PHP findet sich hierfür eine Übersicht
aller verfügbaren Einstellungen, deren Standardwerte sowie der möglichen
Definitionsorte.
Einstellungen global ändern
Die grundlegenden Einstellungen für PHP werden über die Datei php.ini
vorgenommen. Diese liegt in der Regel im Verzeichnis /etc und ist durch den
Benutzer root mit einem beliebigen Texteditor editierbar. Sollte die Datei nicht
in /etc liegen kann, hilft der Befehl locate php.ini bei der Suche.
Einstellungen, die hier vorgenommen werden, gelten für alle auf dem Server
befindlichen Accounts.
Der Aufbau der Datei ist einfach. Zeilen, die mit einem Semikolon beginnen
sind Kommentare. Ansonsten entspricht die Notation dem Schema Option = Wert:
; Safe Mode
;
safe_mode = On
Um den Safe Mode für den kompletten Server zu deaktivieren muß also
lediglich die Zeile oben in safe_mode = On geändert werden. Die Änderung
wird jedoch erst aktiv, wenn PHP die Konfiguration neu einliest. Dies geschieht
nur beim Start. Durch einen Reload von Apache kann PHP aber dazu bewegt werden,
die Konfigurationsdatei neu einzulesen. Dies geschieht mit bei den meisten Linux-Distributionen
dem folgenden Befehl:
/etc/init.d/apache reload
Einstellungen pro Account ändern
Server ohne Verwaltungssoftware
Die Konfiguration des Webservers Apache erfolgt über die Datei /etc/httpd/httpd.conf.
Diese Datei kann durch den Benutzer root mit einem beliebigen Texteditor bearbeitet
werden. Für jeden Account (in der Terminologie von Apache als "Virtual
Server" bezeichnet) ein Eintrag der Form
<VirtualHost xxx.xxx.xxx.xxx:xx>
ServerName www.meinedomain.de
DocumentRoot /var/www/meinedomain/
User meinuser
Group meinegruppe
</VirtualHost>
Hier kann durch das Hinzufügen einer Zeile zwischen den Virtualhost-Direktiven
eine Einstellung geändert werden. Ein Eintrag beginnt immer mit php_admin_value
bzw. php_admin_flag gefolgt von der gewünschten Option und dem Wert. Die
Direktive php_admin_flag dient dabei für Optionen wie z.B. safe_mode, die
lediglich die Zustände On/Off kennen, und php_admin_value dient für
Optionen, die tatsächlich einen Wert annehmen wie z.B. open_basedir:
php_admin_flag safe_mode off
php_admin_flag register_globals on
php_admin_value open_basedir /var/www/meinedomain/
Server mit Confixx als Verwaltungssoftware
Bei vielen Root-Servern ist das Programm Confixx zur Verwaltung des Servers
installiert. Etwas versteckt im Administratoren-Bereich von Confixx findet sich
im Menüpunkt Einstellungen die Option "httpd Spezial". Einstellungen
für einen Account können über den Punkt "einen Kunden Ändern"
geändert werden.

Ist ein Kunde ausgewählt erscheint ein Eingabefeld:

Hier kann pro Zeile eine Einstellung geändert werden. Ein Eintrag beginnt
immer mit php_admin_value bzw. php_admin_flag gefolgt von der gewünschten
Option und dem Wert. Die Direktive php_admin_flag dient dabei für Optionen
wie z.B. safe_mode, die lediglich die Zustände On/Off kennen, und php_admin_value
dient für Optionen, die tatsächlich einen Wert annehmen wie z.B. open_basedir:
php_admin_flag safe_mode off
php_admin_flag register_globals on
Mit den Optionen "für alle Domains des Kunden setzen" und "für
alle Domains, die vom Kunden angelegt werden, setzen" wird sichergestellt,
daß die Änderung für den gesamten Account wirksam werden.
Nachdem die Änderungen gespeichert sind, werden diese aber nicht sofort
aktiv. Confixx schreibt die Konfiguration des Servers in regelmäßigen
Abständen neu und lädt Apache neu, um die geänderten Einstellungen
zu aktivieren. Je nach dem Abstand zwischen den Update Intervalle, die in Confixx
eingestellt sind, kann es einige Zeit (in der Regel einige Minuten) dauern,
bis die neuen Einstellungen wirklich aktiv sind.
Server mit Plesk als Verwaltungssoftware
Obwohl Plesk das Flaggschiff unter den Serververwaltungsprogrammen ist, bietet
es im Gegensatz zu Confixx nicht die Möglichkeit, PHP-Einstellungen über
die grafische Oberfläche zu ändern.
Plesk legt für jeden Account ein Verzeichnis nach dem Schema /home/httpd/vhosts/meinedomain.de
an. Im diesem Verzeichnis legt Plesk widerum eine Reihe von Unterverzeichnissen
an. Im Verzeichnis conf liegt die Datei httpd.include, über
die der Virtual Host für den Account definiert wird. In diesem Verzeichnis
kann zusätzlich über einen Texteditor eine Datei namens vhost.conf
angelegt werden, die Direktiven zur Veränderung von PHP-Einstellungen enthalten
kann:
php_admin_flag safe_mode off
php_admin_flag register_globals on
Damit die Datei von Plesk eingebunden wird ist zudem der Aufruf des folgenden
Befehls notwendig:
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=meinedomain.de
Die Angabe der Domain sollte dabei dem Domainnamen entsprechen, über den
der Account in Plesk angelegt ist. Nach dem nächsten automatischen Neustart
von Apache sollten die Änderungen aktiv werden. Dies kann einige Minuten
in Anspruch nehmen. Alternativ kann in Plesk im Menü Server unter dem Punkt
Dienste-Verwaltung über das Icon rechts aussen manuell ein Neustart von
Apache angestossen werden:

Safe_Mode bei Plesk 8 einstellen
Seit der Version 8 bietet Plesk die Möglichkeit, die Einstellung Safe_Mode
direkt aus der Administration von Plesk zu steuern. Die Option versteckt sich
im Setup des Hostings:

Über die Datei vhost.conf lässt sich der Safe_Mode dann nicht mehr
steuern - alle anderen Optionen können nach wie vor mit der oben beschriebenen
Methode beeinflussen.
Sonderfall open_basedir
Die Option open_basedir wird von Plesk bei jedem Account innerhalb der <directory>
Direktive definiert uns lässt sich nicht analog zu den oben genannten Optionen
überschreiben. Es ist deshalb notwendig die open_basedir Definition auch
innerhalb der Datei vhost.conf in eine <directory> Direktive einzuschliessen:
<Directory /home/httpd/vhosts/xxx.de/httpdocs>
<IfModule sapi_apache2.c>
php_admin_value open_basedir "/home/httpd/vhosts/xxx.de/httpdocs:/tmp"
</IfModule>
</Directory>
Die Vorlage hierfür findet man in der Datei httpd.include
innerhalb des conf Verzeichnisses des betreffenden Accounts. Diese übernimmt
man idealerweise per Copy & Paste in die Datei vhost.conf und erweitert
lediglich den Pfad der bereits vorhandenen open_basedir Definition. Die einzelnen
Verzeichnisse auf die ein Script zugreifen darf werden dabei jeweils durch einen
Doppelpunkt. Um also beispielsweise einer Applikation den Zugriff auf das Programmverzeichnis
/usr/bin zu gewähren hängt man an die vorhandene
Definition ein ":/usr/bin" an:
<Directory /home/httpd/vhosts/xxx.de/httpdocs>
<IfModule sapi_apache2.c>
php_admin_value open_basedir "/home/httpd/vhosts/xxx.de/httpdocs:/tmp:/usr/bin"
</IfModule>
</Directory>
Einstellungen via .htaccess Datei pro Verzeichnis vornehmen
Wenn auf einem Server die Optionen "AllowOverride Options" oder "AllowOverride
All" gesetzt sind besteht die Möglichkeit PHP-Einstellungen des Typs
PHP_INI_PERDIR bzw. PHP_INI_ALL über eine .htaccess Datei pro Verzeichnis
zu steuern.
Zu diesen Einstellungen gehören beispielsweise die Optionen register_globals
oder memory_limit.
Die Definition erfolgt über die Direktiven php_flag für Optionen die
lediglich die Ausprägungen On/Off kennen bzw. php_flag für Optionen
denen ein Wert zugewiesen wird.
Hier ein Beispiel für zwei derartige Definitionen:
php_flag register_globals On
php_value memory_limit 16M
Sollte es beim Versuch auf diesem Wege Einfluss auf PHP-Einstellungen zu nehmen
zu einem „Internal Server Error“ kommen, so fehlen Ihnen die genannten
AllowOverride Privilegien.
|