Hallo Jörg,
Ein PHP-Script legt einen neuen Ordner an. Danach versucht das Script, Dateien in diesem Ordner abzulegen. Das funktioniert nicht. Liegt wahrscheinlich daran, dass als Owner für diesen neuen Ordner wwwrun eingetragen wird.
Ja, Du tappst da leider in eine Falle, die Dir der safe_mode stellt.
PHP ueberprueft im safe_mode beim Erstellen des Ordners mit mkdir(), ob das darueberliegende Verzeichnis die gleiche UID hat, wie das ausgefuehrte Skript. Ist dies der Fall, wird der Ordner angelegt. Da PHP in Deinem Fall wohl als Apache-Modul laeuft, erstellt PHP den Ordner mit der UID des Webservers (hier also "wwwrun").
Wenn Du nun versuchst, in dieses Verzeichnis Dateien zu kopieren (copy(), move_uploaded_file()), wird die gleiche Ueberpruefung vorgenommen - nur sind die UID des Ordners und die des Skripts ja nun unterschiedlich. Das quittiert PHP mit einer Fehlermeldung.
-
Du koenntest den Ordner von Hand anlegen und dann die Dateien per PHP-Skript hineinkopieren - Unterverzeichnisse kannst Du dadurch aber natuerlich nicht erstellen.
-
chown() ist leider auch keine Moeglichkeit, da auch hier diese Ueberpruefung stattfindet (die Datei/das Verzeichnis, auf das chown() angewendet wird, muss ebenfalls die gleiche UID wie das Skript haben).
-
Dein Hoster koennte in der php.ini "safe_mode_gid" auf "true" setzen, dann wuerde die Ueberpruefung nicht mehr die UID, sondern die GID betreffen. Wenn Du Dein Skript dann per chgrp() der Webserver-Gruppe zugehoerig machst, koennte das Anlegen von Ordnern und das hineinkopieren von Dateien auch vom PHP-Skript aus funktionieren - das haengt aber wiederum von der Umgebung bei Deinem Hoster ab.
Mehr faellt mir dazu auch nicht ein.
Beste Gruesse
Jan