Zugrifsrechte bei hochgeladenen Dateien
Marc
- php
Ich habe einen User-Bereich, in dem die Leute eigene Bilder hochladen und gegebenenfalls auch überschreiben und löschen können.
Dazu soll für jedem User beim ersten Mal, falls noch nicht geschehen, ein Ordner erstellt werden. Leider habe ich nirgends die konkrete Lösung dafür gefunden:
-Welche Zugriffsrechte muss der Ordner haben?
-welche Zugriffsrechte müssen die Bilder haben?
Vielen Dank
Hello,
-Welche Zugriffsrechte muss der Ordner haben?
-welche Zugriffsrechte müssen die Bilder haben?
Das Verzeichnis sollte mittels PHP-Script angelegt werden, dann hat es automatisch den Owner des Webservers (bei der Modulversion von PHP). Die Rechte für Gruppe und Others kanns Du alle auf --- (0) setzen. Es kann aber sein, dass Du dann mittels FTP nicht mehr an die Dateien herankommst, aber Du hast ja PHP.
Die Dateien, die mittels Script hochgeladen werden, gehören dann automatisch dem Webserver. Gruppe Wird auch der Webserver sein, Others wird vermutlich automatisch auf (0) stehen.
Du musst allerdings dafür sorgen, dass weder ausführbare Dateien noch Scripte hochgeladen werden können. Das würde nämlich eine Riesenlücke in Dein System reißen.
Außerdem sollte man Fantasienamen für die Datein vergeben. Man könnte
B0001-dateiname-abcdef1234567890abcdef1234567890.jpg
User auf dem Zufallszahl
Client
vergeben. Dann könntest Du z.B. alle Files des Users mittels glob() filtern oder alle jpg-Dateien filtern. Die Methode sorgt auch dafür, dass keine Files versehentlich überschrieben werden können.
Den Dateinamen, der vom Client kommt, solltest Du auf jeden Fall mit basename() behandeln.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Für den Ordner:
Muss der Owner dann nur lesen können oder schreiben oder ausführen? Oder alles zusammen?
der owner muss Schreibrechte für den Ordner haben um Dateien hineinkopieren und überschreiben bzw. löschen zu können.
Ausführen nur falls du irgendwelche Scripte in dem Ordner hast.
Hello,
der owner muss Schreibrechte für den Ordner haben um Dateien hineinkopieren und überschreiben bzw. löschen zu können.
Ausführen nur falls du irgendwelche Scripte in dem Ordner hast.
Nein, das x-Recht ist zwingend erforderlich, wenn man mit dem Inhalt des Verzsichnisses arbeiten will.
Wenn also Dateien im Verzeichnis abgelegt werden sollen oder verändert, dann ist das x-Recht für das Verzeichnis notwendig. Anderenfalls darf das OS dieses Verzeichnis nicht in den aktiven Pfad aufnehmen.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hello,
Für den Ordner:
Muss der Owner dann nur lesen können oder schreiben oder ausführen? Oder alles zusammen?
Harzliche Grüße vom Berg
Der Owner sollte der Webserver sein.
Der muss lesen können, um das Verzeichnis aufzulisten
Der muss schreiben können, um Dateien im Verzeihnis anlegen zu können
Der muss das active-Recht (x) haben, um die Dateien im Verzeichnis "benutzen" zu können
Benutzen bezieht sich dann auf das Recht, das bei der Datei selbst gewährt wurde.
Die Dateien benötigen nur das rw- Recht für den Owner bzw. den PHP-Prozess
esst mehr http://www.harte-harzer.de
Tom
Ich mache irgendwas falsch:
Die Rechte sind auf 777 gesetzt, aber mit rmdir() lässt sich das Verzeichnis nicht löschen.
Es kommt immer die Meldung "unable to access <verzeichnis>"
und dann "RmDir failed (No such file or directory)"
Hello,
Ich mache irgendwas falsch:
Die Rechte sind auf 777 gesetzt, aber mit rmdir() lässt sich das Verzeichnis nicht löschen.
Wer führt denn das rmdir() aus? Darf der das?
Liegt das Verzeichnis denn überhaupt dort, wo Du annimmst?
Wie lautet denn der realpath()?
Es kommt immer die Meldung "unable to access <verzeichnis>"
und dann "RmDir failed (No such file or directory)"
Dann ist ja klar, dass für den ausführenden User kein Verzeichnis vorhanden ist.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Das ist jetzt zuviel auf einmal:
Das rmdir() wird vom PHP-Skript ausgeführt.
Der Ordnername heißt einfach "1" und liegt im selben Verzeichnis wie das Skript.
Der aufruf lautet:
rmdir("1");
Vielleicht stelle ich mich auch nur zu doof an...
Hello,
Das rmdir() wird vom PHP-Skript ausgeführt.
Der Ordnername heißt einfach "1" und liegt im selben Verzeichnis wie das Skript.
Der aufruf lautet:
rmdir("1");
Und wer hat das Verzeichnis angelegt?
Enthält es ggf. schon Daten, wobei das für die beschrieben Fehlermeldung nicht relevant ist?
Wird das Verzeichnis vielelicht vom selben Script angelegt, dass es dann wieder löschen soll? Also von derselben Instanz!?
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Dasselbe Skript hat es auch angelegt. Es ist nur ein Test-Skript:
Ist der Ordner nicht da: Verzeichnis anlegen (funktioniert)
Ist der Ordner breits da: Verzeichnis löschen (funktioniert nicht)
Das (hier wieder das ursprüngliche) Skript funktioniert ohne äußere Eingaben:
if (!(chdir("../objekte/ordner")))
{
mkdir("../objekte/ordner", 777);
}
else
{
rmdir("../objekte/ordner");
}
Hello,
Dasselbe Skript hat es auch angelegt. Es ist nur ein Test-Skript:
Abr eine andere Instanz. DAS wollte ich wissen :-)
Ist der Ordner nicht da: Verzeichnis anlegen (funktioniert)
Ist der Ordner breits da: Verzeichnis löschen (funktioniert nicht)Das (hier wieder das ursprüngliche) Skript funktioniert ohne äußere Eingaben:
if (!(chdir("../objekte/ordner")))
{
mkdir("../objekte/ordner", 777);
}
else
{
rmdir("../objekte/ordner");
}
Wie soll das funktionieren, wenn Du nicht schummeslt?
Du fragst, ob Du das aktuelle Verzeichnis in ../objekte/ordner wechseln hannst.
Wenn es nicht klappt, legst Du das Verzeichnis an.
Wenn es klappt, stehst Du jetzt in ../objekte/ordner und versuchst dort ../objekte/ordner zu löschen, also ./objekte/objekte/ordner. Oder?
Warum benutzt Du nicht vorher http://de.php.net/manual/en/function.file-exists.php und is_dir() [http://de.php.net/manual/en/function.is-dir.php], um festzustellen, ob der Pfad existiert und ob es sich dabei um ein Directory handelt.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Ich Danke Dir!!!
Die Funktion kannte ich nicht - Ich hab woanders gelesen, dass man mit chdir auch ein Verzeichnis auf Existenz hin überprüfen kann..aber das hätte ich wissen müssen...naja, hauptsache, es geht