Prüfen mit file_exists, is_readable, is_writeable, usw
Horst Nogajski
- php
Hallo zusammen,
ich würde gerne wissen ob (vor allem auf Unix-Systemen) es ein Unterschied ist wenn man mit file_exists oder mit is_readable prüft.
Also konkret: bedeutet es auch gleichzeitig das eine Datei lesbar ist, für den aktuellen Benutzer (PHP), wenn die Funktion file_exists() WAHR zurückgibt?
Oder kann es auch sein, das die Funktion file_exixts() WAHR zurückgibt wenn eine Datei existiert für die der aktuelle Benutzer (PHP) keinerlei Rechte hat (also weder lesen noch schreiben und schon gar nicht ausführen)?
Ich kann es selber leider nicht ausprobieren weil ich keinen Unix-Rechner habe.
Viele Grüße,
Horst
Also konkret: bedeutet es auch gleichzeitig das eine Datei lesbar ist, für den aktuellen Benutzer (PHP), wenn die Funktion file_exists() WAHR zurückgibt?
Oder kann es auch sein, das die Funktion file_exixts() WAHR zurückgibt wenn eine Datei existiert für die der aktuelle Benutzer (PHP) keinerlei Rechte hat (also weder lesen noch schreiben und schon gar nicht ausführen)?
Hier hast Du Deine Frage eigentlich schon selbst beantwortet.
Ebenso findest Du die Antwort auf http://www.php.net indem du nach den beiden Funktionen mal suchst ;o)
Gruss
Stefan
Super Antwort, Danke.
Hier hast Du Deine Frage eigentlich schon selbst beantwortet.
Damit sind dann ja jetzt alle meine Unsicherheiten beseitigt.
Ebenso findest Du die Antwort auf http://www.php.net indem du nach den beiden Funktionen mal suchst ;o)
Der Tipp ist auch echt Klasse. Da wäre ich von selber gar nicht drauf gekommen. ;-)
(Unter file_exists wird mit keiner Silbe eine Antwort oder ein Hinweis auf meine Fragestellung gegeben, jedenfalls hab ich das noch nie dort gesehen.)
Also noch ein Versuch: Wenn ich unter Windows ein Verzeichnis nur für einen bestimmten Benutzer eingerichtet habe, und ich per file_exists oder per is_readable eine Datei in diesem Verzeichnis prüfe, dann bekomme ich in keinem Fall WAHR zurück, weil ich z.B. das Verzeichnis schon gar nicht lesen kann. Wenn nur die Datei, aber nicht das Verzeichnis, nicht lesbar ist bekomme ich WAHR zurück.
Ist das unter Unix 100% genau so?
Wenn Du dann jetzt vielleicht die freundliche Güte hättest meine Frage noch einmal mit einer Antwort zu beehren, so Du denn den Sachverhalt sicher kennst, wäre ich Dir sehr dankbar. ;-)
Wenn Du es aber selber nur 'eigentlich' weist, gebe ich mich lieber mit bisherigen Antwort zufrieden. ;o)
Viele Grüße,
Horst
Hello,
ich würde gerne wissen ob (vor allem auf Unix-Systemen) es ein Unterschied ist wenn man mit file_exists oder mit is_readable prüft.
Also konkret: bedeutet es auch gleichzeitig das eine Datei lesbar ist, für den aktuellen Benutzer (PHP), wenn die Funktion file_exists() WAHR zurückgibt?
Oder kann es auch sein, das die Funktion file_exixts() WAHR zurückgibt wenn eine Datei existiert für die der aktuelle Benutzer (PHP) keinerlei Rechte hat (also weder lesen noch schreiben und schon gar nicht ausführen)?Ich kann es selber leider nicht ausprobieren weil ich keinen Unix-Rechner habe.
Jetzt hast Du aber Glück gehabt.
Ich wollte gerade zu meckern ansetzen und sagen: probiers doch aus.
file_exists ist true, wenn der NAME der Datei gelesen werden darf. das ist immer der Fall, wenn das Verzeichnis, in dem sich die Datei befindet, für den User nutzbar (x) ist. Das r-Recht muss weder für die Verzeichnisse noch für die datei selber vorhanden sein.
is_readable() ist true, wenn für die datei das (r)-Recht gesetzt ist und für alle Stufen des Verzeichispfads das (x)-Recht
is_executable() ist true, wenn für alle Stufen des Verzeichispfads das (x)-Recht (zum Finden der Datei) und für die Datei das (x)-Recht (Ausführung) gestzt ist. das (r)-Recht der Datei muss dazu nicht gesetzt sein. Ich bin nun allerdings nicht sicher, welche Dateien dann ausgeführt werden können. Echte Binaries könnten z.B. auch ohne r-Recht ausführbar sein, während Scripte, die ja erst an einen Interpreter übergeben werden müssen, ggf. lesbar sein müssen. Das wäre noch mal zu testen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Jup, das nenne ich doch eine sicherheitsgebende Antwort! ;-)
Jetzt hast Du aber Glück gehabt.
Ich wollte gerade zu meckern ansetzen und sagen: probiers doch aus.
Ja, scheint so, ;-)
Vielen Dank und liebe Grüße,
Horst
Hello,
ich habe das mit den Binaries nochmal ausprobiert.
Musste dazu eben nochmal schnell C lernen *gg*
Binaries sind also auch ausführbar, wenn der User nicht das (r)-Recht dafür hat. Hatte ich unter HP-UX vor 20 Jahren auch mal so gelernt. Aber Linux ist nicht HP-UNIX.
Daher ist es also sinnvoll, dass is_executable() true ergibt, auch wenn is_readable() false ergibt. Wie gesagt, bei Scripten gilt das nicht.
--------------------------------------------------
Mich würde nun noch interessieren, was man tun muss,
damit ein PERL-Script ausführbar wird, obwohl es für
den User nicht lesbar ist. Kann man PERL-Scripte in
Binaries umwandlen lassen?
--------------------------------------------------
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
noch was für Windows und für mandatory Locking unter LINUX:
unter Windows kann eine Datei "lesbar" sein, obwohl sie in Wirklichkeit (im Moment) nicht lesbar ist. Das liegt an der Locking-Strategie von DOS-basierten Systemen. Es ist dort möglich, diskrete Bereiche von Dateien gegen das Exclusive Sperren oder exclusiv, also gegen Lesen und Schreiben durch andere Bneutzer zu markieren. Bewegt man den Filepointer dann lesend oder Schreibend in einen solchen exclusiv gesperrten Bereich hinein, wird ein Fehler ausgelöst.
Unter Linux/Unix umgeht man das "Problem", das eigentlich für gute Programmiere keines ist, indem man per default nur advisory Locking benutzt. Ich habe auch immer noach nicht herausgefunden, wie ich PHP mittels "Plug In" nun beibringen könnte, mandatory Locking zur Verfügung zu stellen. Es ist sicherer, aber erfordert auch mehr Disziplin bei der Programmierung.
Soweit nochmal mein Ausflug wegen der Lesbarkeit...
Liebe Grüße aus http://www.braunschweig.de
Tom