FAQ: Safe Mode und Open Basedir | Archilles | Mittwoch, 23.03.2005 13:51:10 |
Version 1 - 23. März 2005 14:50:00 CEST Wenn eine PHP-Installation eine der beiden im Betreff genannten Optionen verwendet, kann es hier und da schonmal zu Kollisionen mit einzelnen Skripten kommen. Viele Hoster benutzen sie zwar nicht, aber einige eben doch. Auch Pakete zum Download für private Webserver, wie XAMPP. Safe Mode Dazu gibt es eine gute Seite im PHP-Handbuch, was diesen Modus erläutert. Auch hier im Forum gibt es ein paar Sätze dazu. Meistens scheitert es daran, daß der PHP-Prozess eine Datei lesen oder schreiben soll, welche aber nicht ihm "gehört". Das passiert dann, wenn die zum Beispiel von dir per FTP mit Deinem Benutzerkonto hochgeladen wurde. Oder ein Skript nimmt eine vom Browser hochgeladene Datei entgegen, legt sie mit den Rechten des PHP-Prozesses temporär ab und darf sie dann nicht verarbeiten. Weil ja das ausführende Skript dir gehört. PHP-Handbuch - "safe_mode" Wenn du damit Probleme haben solltest, rate ich dir deinen Hoster zu fragen. Gegebenfalls kann er bei problemematischen Dateien den Eigentümer ändern. Bei eigenen Testservern, wenn du die Skripte nur lokal testen möchtest, kannst du auf diesen Modus verzichten. Es sei denn, du entwickelst eigene Skripte und schaust wie sie darauf reagieren ;-) Open Basedir Mit dieser Option kann man die ausgeführten Skripte in eine Verzeichnis-Ebene "einsperren" (chroot). Es können dann keine Dateien außerhalb dieser angefordert oder geschrieben werden. Nach "unten" kann man jedoch immer. Im Grunde eine gute Idee, was auch bei manchen Hostern eingesetzt wird. Das machte jedoch zum Beispiel beim Talkboard Forum in alten Versionen wie 1.4 große Probleme. Es kann aber auch aktuelle Skripte treffen, die versuchen auf Systemresourcen zurückzugreifen. Wenn der Hoster das Verzeichnis auf "." setzt, sperrt er die Skripte in die aktuelle Ebene ein. Die Administration des TBF lag im Unterordner "admin" und durfte so, von dort ausgeführt, leider nicht auf die nötigen Bibliotheken eine Ebene höher zugreifen. Später lagen dann alle Dateien in einem Ordner, sodaß Sprünge in der Verzeichnistiefe nach "oben" nicht mehr nötig waren. Glücklicherweise wird diese Variable, wenn sie gesetzt wird, heute meistens auf dein Heimatverzeichnis eingestellt. Hier bleibt bei Problemen nur der Ausweg die Skripte entsprechend umzuschreiben, daß sie die "basedir" beachten. Entweder machst du es bei geeigneten Kenntnissen selber oder bittest den Hersteller des Skriptes dies zu tun. In ganz harten Fällen, wenn weder Hoster noch Hersteller helfen möchten, bleibt nur der Umzug auf einen Server ohne diese Restriktionen. Wie kann ich feststellen, ob ich eines davon habe? Du kannst deinen Hoster/Admin fragen, warten bis ein Fehler auftritt oder PHP, sofern erlaubt, fragen. Erstelle dazu eine leere Datei und schreibe folgendes hinein: PHP-Quelltext ('phpinfo.php'):
============================================================
Das ganze speicherst du unter einem netten Namen, kopierst es auf den Server und lädst die Seite im Browser, z.B. "http://www.deinedomain.de/phpinfo.php". Du solltest eine sehr lange Liste mit PHP-Infos sehen. Am Anfang stehen in der Regel die Versionsangaben und weitere Infos zum System. Es folgt eine längere Tabelle mit der "PHP Configuration". Schaue nach den Einträgen "safe_mode" und "open_basedir". Wichtig ist der Eintrag "local value", denn der gilt im aktuellen Verzeichnis. Bei safe_mode steht entweder on oder off und bei der basedir wird entweder ein Pfad angegeben oder das Feld ist leer. Dieses Bild soll nicht implizieren, daß beides zu deaktivieren das einzig Wahre ist! Es ist nur ein Beispiel meiner Konfiguration, die ich aktuell nutze :-) |