Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Frage zu PHP, open_basedir und is_dir / is_file
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
wizzzard
Tux's lil' helper
Tux's lil' helper


Joined: 31 Mar 2003
Posts: 116
Location: Bonn, Germany

PostPosted: Sun May 27, 2007 6:39 pm    Post subject: Frage zu PHP, open_basedir und is_dir / is_file Reply with quote

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
View user's profile Send private message
Salathe
n00b
n00b


Joined: 02 Jan 2006
Posts: 57
Location: Switzerland

PostPosted: Mon May 28, 2007 11:52 am    Post subject: Reply with quote

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
View user's profile Send private message
wizzzard
Tux's lil' helper
Tux's lil' helper


Joined: 31 Mar 2003
Posts: 116
Location: Bonn, Germany

PostPosted: Mon May 28, 2007 12:22 pm    Post subject: Reply with quote

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
View user's profile Send private message
Anarcho
Advocate
Advocate


Joined: 06 Jun 2004
Posts: 2970
Location: Germany

PostPosted: Mon May 28, 2007 12:41 pm    Post subject: Reply with quote

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
View user's profile Send private message
wizzzard
Tux's lil' helper
Tux's lil' helper


Joined: 31 Mar 2003
Posts: 116
Location: Bonn, Germany

PostPosted: Mon May 28, 2007 12:44 pm    Post subject: Reply with quote

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
View user's profile Send private message
Anarcho
Advocate
Advocate


Joined: 06 Jun 2004
Posts: 2970
Location: Germany

PostPosted: Tue May 29, 2007 6:37 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
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