URL: https://www.overclockers.at/coding-stuff/php_mkdir_zickt_rum_139416/page_1 - zur Vollversion wechseln!
PHP wirft folgende Meldung:
Warning: mkdir(): SAFE MODE Restriction in effect. The script whose uid is 66995 is not allowed to access dienstplaene/2007 owned by uid 60001 in /www/salzburg/zivi/upload.php on line 14
der Befehl:
Code: PHP.... if(!is_dir("dienstplaene/".$_POST["jahr"])) { $chck=mkdir("dienstplaene/".$_POST["jahr"]); } $chck=mkdir("dienstplaene/".$_POST["jahr"]."/".$_POST["monat"]); <= line 14 if($chck) { echo "<div class='text'>Ordner erfolgreich erstellt</div>"; }
Steht doch schon da - Safe Mode Restriction, daran ist das OS nicht (alleine) schuld.
SunOS ist btw nicht Linux. 
Zitat von COLOSSUSSteht doch schon da - Safe Mode Restriction, daran ist das OS nicht (alleine) schuld.
Danke wusste ich vorher auch schon, löst aber mein problem ned
![]()
SunOS ist btw nicht Linux.![]()
Mein fehler, zuerst geschrieben und dann erst in der phpinfo nachgeschaut.
mach mal ein chmod mit param 0777 beim 1. erstellten verz.
danke fürn tipp, mach ich morgen mein zivikollege ist scho am schlafn und ich will ned den lapi herumzahn.
code also so:
Code: PHP$chck=mkdir("dienstplaene/".$_POST["jahr"], "0777");

mat das half leider nix :/ same error.
ich bin mir nicht wirklich sicher, da ich safemode eigentlich nicht verwende. aber es gibt für safe mopde doch in der ini eine einstellung, wo man nen pfad angeben kann, in dem man normal arbeiten kann, oder irr ich da?safe_mode_exec_dir oder open_basedir?
wobei -> no access to ini for me :/
wobei das was mich da so irritiert ist der fakt, dass der erste ordner problemlos erstellt werden kann, beim 2. ordner aber nix mehr geht. obwohl der ordner mit 777 ge CHmodet sein müsste.
-----------------------
SOLVED
Nach intensivstem gugln stellte sich heraus, dass beim SAFE Mode kein "unterordner" von php erzeugt werden kann. der "oberordner" muss vom FTP client kommen sonst geht nix.
work around => ftp Connection.
Code: PHPfunction FtpMkdir($path, $newDir, $chmod=" 777 ") { $server='www.myserver.at'; // ftp server $connection = ftp_connect($server); // connection // login to ftp server $user = "ftpusername"; $pass = "password"; $result = ftp_login($connection, $user, $pass); // check if connection was made if ((!$connection) || (!$result)) { return false; exit(); } else { ftp_chdir($connection, $path); // go to destination dir if(ftp_mkdir($connection,$newDir)) { // create directory ftp_site($connection, "CHMOD".$chmod.$newDir); return $newDir; } else { return false; } ftp_close($connection); // close connection }
if (!preg_match("/^[0-9]+$/",$_POST["jahr"])) die("someone is playing nasty tricks on me");Zitat von semteXZitat von Deejay2k1Außerdem ist es eher egal das FF mehr Sicherheitslücken hat, da es wenig Gegener hat wie der IE von MS...
thx, das ganze ist zwar eh htaccess geschützt aber schaden tuts nie.Zitat von atroxif (!preg_match("/^[0-9]+$/",$_POST["jahr"])) die("someone is playing nasty tricks on me");
lies mal die php documentation für safemode.
unter safemode darfst du nur auf verzeichnisse zugreiffen, welche auch die userid (respektive gruppenid) des ausgeführten scripts haben.
d.h. userid des auszuführenden scripts = 66995 (wahrscheinlich dein ftp-user)
von dir erstellte verzeichnisse werden aber vom apache aus erstellt (wahrscheinlich user id 60001).
somit darfst du keine files/ordner in dein selbst erstelltes verzeichnis schreiben.
ist ein gängiges problem bei safemode.
um das zu umgehen müsstest den owner des verzeichnisses ändern:
etwas wie
Code: PHPif(!is_dir("dienstplaene/".$_POST["jahr"])) { $chck=mkdir("dienstplaene/".$_POST["jahr"]); system("chown user.gruppe dienstplaene/".$_POST["jahr"]); }

führst du all deine Scripts als root aus?Zitat von Jehullies mal die php documentation für safemode.
unter safemode darfst du nur auf verzeichnisse zugreiffen, welche auch die userid (respektive gruppenid) des ausgeführten scripts haben.
d.h. userid des auszuführenden scripts = 66995 (wahrscheinlich dein ftp-user)
von dir erstellte verzeichnisse werden aber vom apache aus erstellt (wahrscheinlich user id 60001).
somit darfst du keine files/ordner in dein selbst erstelltes verzeichnis schreiben.
ist ein gängiges problem bei safemode.
um das zu umgehen müsstest den owner des verzeichnisses ändern:
etwas wieCode: PHPif(!is_dir("dienstplaene/".$_POST["jahr"])) { $chck=mkdir("dienstplaene/".$_POST["jahr"]); system("chown user.gruppe dienstplaene/".$_POST["jahr"]); }
das geht natürlich nur, wenn der system befehl nicht gesperrt ist.
EDIT: @semtex: hab deinen edit nicht gelesen
aber der ftp workaround ist natürlich genial.
aber kein vernünftiger programmier stiel :>

@watchout: du meinst wegen chown?
ich habs zwar nicht getestet. aber des wär mein lösungsansatz gewesen 
im google hab ich auch noch leute gefunden, die mittels cronjob alle 5 mins über die ordner mit chown drüberfahren ;>
Also, php würd ich aber trotzdem auf keinen Fall als root ausführen...Zitat von Jehul@watchout: du meinst wegen chown?
ich habs zwar nicht getestet. aber des wär mein lösungsansatz gewesen
im google hab ich auch noch leute gefunden, die mittels cronjob alle 5 mins über die ordner mit chown drüberfahren ;>

Zitat von watchoutAlso, php würd ich aber trotzdem auf keinen Fall als root ausführen...
Da find ich den ftp-Ansatz noch am besten... Ausser natürlich php unter diesem User auszuführen, wie ja auch der safemode gedacht ist. Das ist daher ein eindeutiger Pfusch vom Provider, und dem hätt' ich schon mal paar "nette" E-Mails geschickt deswegen...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026