Mkdir, chmod, chown und der safe_mode

Hallo,

für eine Upload-Funktion möchte ich, dass die Dateien für jedes eingeloggte Mitglied in einem eigenen, beim Registrieren angelegten Unterverzeichnis speichert werden.

Hat sich ein User registriert, wird das Unterverzeichnis für ihn automatisch erstellt. Hierfür benutze ich mkdir und chmod.

Eigentümer des neuen Verzeichnisses ist nun automatisch „wwwrun“. Besitzer des Skripts, mit dem dann der Upload gemacht werden soll, ist aber der FTP-Benutzer, der die PHP-Skripte hochgeladen hat.

Unabhängig von der chmod-Rechtevergabe blockt der safe_mode also nun das Hochladen der Dateien mit dem Fehler:

move\_uploaded\_file(): SAFE MODE Restriction in effect.
The script whose uid is 123 is not allowed to access
/home/htdocs/kunde026/html/user741
owned by uid 321 in
/home/htdocs/kunde026/html/dateiupload.php
on line 77

Kann das Skript, das den Ordner anlegt, diesem Ordner gleich den richtigen Eigentümer zuordnen, damit das spätere Upload klappt? Problem ist auch, ich weiß ja noch nicht, bei welchem Provider welcher FTP-Benutzer eingerichtet wird. Das Skript müsste also erst schauen, wem es selbst gehört und dem neuen Ordner dem selben Besitzer zuordnen.

Oder welche andere (bessere!) Lösung gäbe es noch? Bin grad blind für Alternativen… *ächz*

Vielen Dank für Unterstützung
Wolfgang

Hallo,

Kann das Skript, das den Ordner anlegt, diesem Ordner gleich
den richtigen Eigentümer zuordnen, damit das spätere Upload
klappt? Problem ist auch, ich weiß ja noch nicht, bei welchem

Nein. Zumindest nicht direkt. Den Besitzer ändern kann nur der Administrator („root“) die Rechte hat dein Script nicht.
Einzige Möglichkeit bei eingeschaltetem safe_mode: Sofern die ftp-Funktionen aktiv sind, nimm den PHP FTP Client zum Anlegen des Verzeichnisses, dann gehört es dem FTP-Benutzer. Ohne FTP Funktionen ggfs. auch per fsockopen und „FTP von Hand“, was aber noch komplizierter ist (und auch gesperrt sein kann).
http://www.php.net/manual/de/ref.ftp.php

Provider welcher FTP-Benutzer eingerichtet wird. Das Skript
müsste also erst schauen, wem es selbst gehört und dem neuen
Ordner dem selben Besitzer zuordnen.

Geht nicht, solange das Script nicht als root läuft.

Oder welche andere (bessere!) Lösung gäbe es noch? Bin grad
blind für Alternativen… *ächz*

Neben der oben per FTP eigentlich nur eine: keine Unterverzeichnisse verwenden, sondern Dateipräfixe für jeden Nutzer, also z.B. nutzername_dateiname. Oder einen Provider suchen, bei dem der safe_mode aus ist.

Alexander

Hallo Alexander,

Kann das Skript, das den Ordner anlegt, diesem Ordner gleich
den richtigen Eigentümer zuordnen, damit das spätere Upload
klappt? Problem ist auch, ich weiß ja noch nicht, bei welchem

Einzige Möglichkeit bei eingeschaltetem safe_mode: Sofern die
ftp-Funktionen aktiv sind, nimm den PHP FTP Client zum Anlegen
des Verzeichnisses, dann gehört es dem FTP-Benutzer. Ohne FTP
Funktionen ggfs. auch per fsockopen und „FTP von Hand“, was
aber noch komplizierter ist (und auch gesperrt sein kann).
http://www.php.net/manual/de/ref.ftp.php

Danke schön, diese Funktionen hatte ich gar nicht im Blick. Da werd ich noch mal drüber schauen.
W