Jump to content
Sign in to follow this  
Powie

file_exists() Problem php 5.2.2

Recommended Posts

Mir wachsen graue Haare..... irgendwie habe ich den Verdacht das die Funktion seid php 5.2.2. spinnt.


Ich bekomme bei Verwendung einen open_basedir restriction Fehler, wenn die Datei nicht existiert...... Eine Erklärung ist mir bisher noch nicht untergekommen, ich habe es erst garnicht ausmachen können wo das überhaupt her kommt. Switche ich auf php5.2.0 zurück funktionierts wie es gehört.


Ist das noch jemandem ausser mir aufgefallen?

Share this post


Link to post
Share on other sites
Ich bekomme bei Verwendung einen open_basedir restriction Fehler, wenn die Datei nicht existiert...... Eine Erklärung ist mir bisher noch nicht untergekommen, ich habe es erst garnicht ausmachen können wo das überhaupt her kommt. Switche ich auf php5.2.0 zurück funktionierts wie es gehört.


Also damit noch nicht gearbeitet. Aber wenn es dir hilft, dann packe die Funktion oder die Routine in einen try-catch Block. Dann bricht dir das Skript nicht ab und du kannst normal weiterarbeiten und bspw. eine Fehlermeldung ausspucken.

An sich sehe ich da jetzt auch kein Problem, wenn die Funktion normal arbeitet, wenn eine Datei existiert. Also von daher. Sehe jetzt nur die Möglichkeit, dass an die Entwickler zu melden oder einfach in einem Fehlerfall das komplette Aussetzen des Skriptes zu verhindern.



Grüße

Share this post


Link to post
Share on other sites

ich sehe aber nicht ein ein try_catch zu machen nur weil eine php Funktion nicht das tut was man von ihr erwartet. Vielleicht bin ich auch nur zu blöd und übersehe irgendwas.

Share this post


Link to post
Share on other sites

brauchst du file_exist() mit dem absoluten pfad direkt vom homeverzeichnis aus (bsp. /home/user/public_html/unterordner/bild.jpg) oder relativ (bsp. in der datei /home/user/public_html/index.php mit file_exist(unterordner/bild.jpg))?


dieses problem hatte ich früher auch schon mal. so konnte ich die fehlermeldung umgehen, indem ich immer vom homeverzeichnis aus nachgefragt habe.

Share this post


Link to post
Share on other sites

ich habe es weiter eingegrenzt, und weiss nicht was ich davon halten soll. Vielleicht könnt ihr es selbst ausprobieren.


Einfach Sache: Ich frage im Adminbereich mit file_exists ob das File blog/admin.php existiert, dies schlägt fehl wenn das File nicht existiert. Ausgeworfen bekomme ich einen open_basedir Fehler:

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. 
File(/srv/www/web20/html/blog/admin.php) is not within the allowed path(s):
(/srv/www/web20/html/:/srv/www/web20/phptmp/:/srv/www/web20/files/:/srv/www/web20/atd/) in
/srv/www/web20/html/admin/adminmenuleft.php on line 19

 

Lege ich den Ordner blog an, dann funktioniert der Code und liefert mir sauber das erwartete FALSE zurück!


Auf powie.de funktioniert die ganze Sache hingegen, hier liegt das ganze System im Unterordner cms/ . Die Problematik scheint zu sein das die UID/GROUP der DOCUMENT_ROOT nicht dem eigentlichen Benutzer genau gehört. Das Problem ist erst seid php5.2.2. so nachvollziehbar. Was wurde geändert? Hat jemand eine Idee?

Share this post


Link to post
Share on other sites

Was mir noch einfällt wäre, dass man vorher prüft, obs den Ordner gibt. Wenn nicht, dann abbrechen, wenn ja, dann prüfen, ob die Datei admin.php drin ist. Somit könntest du vielleicht ( ! ) den hässlichen Fehler umgehen.

Share this post


Link to post
Share on other sites

ha.. hab ich gemacht, wenn es den Ordner nicht gibt gibts genau den gleichen open_basedir fehler wenn ich nach dem Ordner frage :gaga:

Share this post


Link to post
Share on other sites

Wie wäre es, wenn du die Datei versuchst per fopen glaub ich zu öffnen? Ist an sich schwachsinnig, ich weiß. Aber vielleicht reicht es erstmal um weiterzuarbeiten. Denn falls du das nicht umgehen kannst, dann downgrade doch, arbeite normal weiter und schau, was in der nächsten Version so kommt. Oder du hackst dich in den Code von PHP rein und fixed das selber :ugly:

Share this post


Link to post
Share on other sites

ist das denn jetzt ein Bug in der PHP Engien generell oder?


weil wennPHP seitig da was schief läuft dann kann ich nur sagen aufschreiben warten bis PHP 5.2.3 draußen ist und kontrollieren!


wenn das ein Script fehler sein sollte dann würde ich tippen entweder kontrollieren ob der File oder Ordner wirklich existiert oder hallt da es anscheinend um das anlegen von dateien geht wieder mittels Datenbank umgehen.


Sprich wie in der Galerie mit den Bildern und der Datenbank wo sie einfach abgelegt werden!


Vieleicht hilfts ja


Gruß Otti

Share this post


Link to post
Share on other sites

ähm... sicher ein bug?, oder auch so gewollt!

aber warum nicht

@file_exists() dann sollte doch die warnung unterdrückt sein

denn soweit ich das sehe, ist die ausgabe der warung doch richtig...


du versuchst eine datei zu checken, die in einem nicht existierenden ordner liegt... deswegen die warung... und file_exists liefert dir bestimmt auch false, wenn der ordner nicht existiert.


gruß raiserle

Share this post


Link to post
Share on other sites
Original von Powie

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. 
File(/srv/www/web20/html/blog/admin.php) is not within the allowed path(s):
(/srv/www/web20/html/:/srv/www/web20/phptmp/:/srv/www/web20/files/:/srv/www/web20/atd/) in
/srv/www/web20/html/admin/adminmenuleft.php on line 19

Lege ich den Ordner blog an, dann funktioniert der Code und liefert mir sauber das erwartete FALSE zurück!



@mahe warum?

so wie es bei powie oben aussieht, funktioniert file_exists() doch.

es kommt laut powie nur zu eine warung, wenn der ordner nicht existiert, was ja auch vollkommen richtig ist.

Share this post


Link to post
Share on other sites

Nabend,


mir scheint es, als prüft der mahe einfach, ob man die Datei includieren kann. Wenn nicht, dann existiert sie auch nicht. Das ist sein Ansatz. Somit würde dann auch Powie's Funktion nicht ins Blaue schießen.


Nur als Versuch, weil ichs hier noch nicht gelesen habe.

 

if (!@file_exists ($file)) 
{
   // spucke fehler aus
} 
else
{
  // mach was mit der Datei
}

 

oder

 

@file_exists ($file) or die ('Fehlermeldung');

 


Grüße

Share this post


Link to post
Share on other sites

@ kooni doch, musst du gelesen haben... weil ichs schon geschrieben hatte ;)


mir ging es aber darum, weil powie meinte er versteht nicht, warum der fehler kommt bzw die warnung


ich bin der meinung, das es kein bug ist, sondern so gewollt ist, weil das directory fehlt... somit fehlt dann zwar auch das file, aber es wird eine warung durch open_basedir erzeugt.


gruß raiserle

Share this post


Link to post
Share on other sites

Nabend,


wir sind auch gerade verwirrt. In der Funktionsberschreibung steht drin, dass er die Existenz von Dateien oder Ordnern prüft. Folgendes sinnloses Verhalten haben wir noch bemerkt.


Lässt man folgendenen Schnipsel laufen,

 

 

 

und der Ordner test existiert, dann kommt keine Warnung, wie oben beim Powie.


Nehme ich aber hingegen den Schnipsel von ihm, so kommt eine Warnung.


Sinnlos: Weil er bekommt in beiden Fällen einen gültigen Ordnerpfad, denn DOCUMENT_ROOT beinhaltet den root-Ordner, also das html-Verzeichnis. Und auch der Ordner test bestand bei uns.


Nur komischerweise hat er bei der Pfadangabe mit dem Ordner test nicht rumgemeckert. :gaga:


Die müssen da was in der Funktion rumgeschraubt haben, denn es schien ja vor der 5.2.2 lauffähig gewesen zu sein.


[edit]Anmerkung gestrichen. Siehe dazu mahes vorletzten Post.[/edit]



Nächtliche Grüße

Share this post


Link to post
Share on other sites
Guest

Mahes Version ist noch aus einem anderen Grund die Beste: Im Gegensatz zum Test auf file_exists() ist die Überprüfung, ob ein File inkludiert werden konnte, nicht von Race Conditions gefährdet. Wenn der Code besonders performant sein soll, kann man auch noch auf das _once verzichten.

Share this post


Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...