View previous topic :: View next topic |
Author |
Message |
wizzzard Tux's lil' helper
Joined: 31 Mar 2003 Posts: 116 Location: Bonn, Germany
|
Posted: Sun May 27, 2007 6:39 pm Post subject: Frage zu PHP, open_basedir und is_dir / is_file |
|
|
Hallo zusammen,
ich bin letztens über ein Problem in PHP gestolpert, bei dem ich logisch ein wenig auf dem Schlauch stehe.
Es geht um open_basedir und die Verwendung der Funktionen is_dir, is_file, und alle weiteren is_X Funktionen. Nehmen wir an, ich hätte open_basedir für das Verzeichnis /var/www/localhost/htdocs/foobar konfiguriert (z.B. in der https.conf durch Code: | 'php_admin_value open_basedir /var/www/localhost/htdocs/foobar/' | ). In dem Verzeichnis finden sich eine Datei 'foo' und ein Ordner 'bar'.
Wenn ich jetzt ein PHP-Skript schreibe, was mir die Datei bzw. den Ordner mit is_file bzw. is_dir überprüft, dann bekomme ich die korrekte 'Antwort', dass beide existieren. Wenn ich jetzt allerdings im Skript anstatt der Datei 'foo' die nicht existierende Datei 'foo_1' mit is_file überprüfe, dann bekomme ich einen open_basedir-Fehler, und das ist genau der Punkt, den ich nicht verstehe.
Der Fehler, den PHP dann ausgibt, sieht in etwa so aus:
Code: | PHP Warning: is_file(): open_basedir restriction in effect. File (/var/www/localhost/htdocs/foobar/foo_1) is not within the allowed path(s): (/var/www/localhost/htdocs/foobar/) |
Die Fehlermeldung ist zwar korrekt, die Datei 'foo_1' liegt wirklich nicht im basedir, sie existiert nicht, dennoch ist der Pfad dahin korrekt. Mein Problem ist nun, sollte anstelle dieser open_basedir-Meldung nicht eigentlich nur die is_file Funktion ein FALSE zurückgeben?
Ich hoffe, das war jetzt einigermaßen verständlich, ich bin für jeden Denkanstoß dankbar. |
|
Back to top |
|
|
Salathe n00b
Joined: 02 Jan 2006 Posts: 57 Location: Switzerland
|
Posted: Mon May 28, 2007 11:52 am Post subject: |
|
|
Das ist eine Sache der Auslegung des Sinn und Zwecks der Funktion. Warscheinlich geht der Entwickler der Funktion davon aus, das bereits festgestellt wurde, ob die Datei existiert, z.B. mit file_exists. Wenn man also den Zeck der Funktion lediglich darauf beschränkt, zu prüfen, ob es sich um ein File handelt oder nicht, ist hier imho eine Exception durchaus angebracht. |
|
Back to top |
|
|
wizzzard Tux's lil' helper
Joined: 31 Mar 2003 Posts: 116 Location: Bonn, Germany
|
Posted: Mon May 28, 2007 12:22 pm Post subject: |
|
|
hmmm, ok
Nur macht file_exists die gleichen Geschichten. Auch da bekomme ich eine Warnung wegen open_basedir, sollte die Datei oder das Verzeichnis nicht existieren.
Nach weiteren Tests habe ich übrigens festgestellt, dass alle diese Funktionen doch korrekt FALSE zurückliefern, für den Fall, dass die Datei nicht existiert, allerdings auch diese open_basedir Warnung. Stellt sich nun die Frage, ob eine nicht vorhandene Datei / Verzeichnis überhaupt noch durch open_basedir bewertet werden sollte, falls sie nicht existiert. Eine weitere Frage wäre, was zuerst kommt, die FALSE Meldung, Datei / Verzeichnis existiert nicht oder die open_basedir Warnung? |
|
Back to top |
|
|
Anarcho Advocate
Joined: 06 Jun 2004 Posts: 2970 Location: Germany
|
Posted: Mon May 28, 2007 12:41 pm Post subject: |
|
|
Du solltest die Meldung loswerden können mit einem @:
if (@is_file(...)) {
}
Benutzt du zufällig PHP 5.2.2?
EDIT:
Anscheinend ist da alter Code wieder eingepflegt worden, siehe Bug von 2003:
http://bugs.php.net/bug.php?id=24313
Du solltest den entsprechenden Bug vielleicht wieder aufmachen. _________________ ...it's only Rock'n'Roll, but I like it! |
|
Back to top |
|
|
wizzzard Tux's lil' helper
Joined: 31 Mar 2003 Posts: 116 Location: Bonn, Germany
|
Posted: Mon May 28, 2007 12:44 pm Post subject: |
|
|
Jepp, das mit dem @ klappt, danke
Und es ist die letzte stable Version von php (5.2.2-r1), wieso?
EDIT:
Nach dem Bug habe ich gesucht, aber so weit zurückgegangen bin ich dann doch nicht. Ich frage mich auch, ob ich der einzige bin, der dieses merkwürdige Verhalten bemerkt, da muss es doch noch mehr geben, oder? |
|
Back to top |
|
|
Anarcho Advocate
Joined: 06 Jun 2004 Posts: 2970 Location: Germany
|
Posted: Tue May 29, 2007 6:37 am Post subject: |
|
|
wizzzard wrote: | Jepp, das mit dem @ klappt, danke
Und es ist die letzte stable Version von php (5.2.2-r1), wieso?
EDIT:
Nach dem Bug habe ich gesucht, aber so weit zurückgegangen bin ich dann doch nicht. Ich frage mich auch, ob ich der einzige bin, der dieses merkwürdige Verhalten bemerkt, da muss es doch noch mehr geben, oder? |
Nein, du bist nicht der einzige. Ich habe noch mehr Meldungen gelesen. Anscheinend ist das erst mit PHP 5.2.2 aufgetaucht. Daher würde ich dir raten den Bugreport wieder aufzumachen. _________________ ...it's only Rock'n'Roll, but I like it! |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|