php: mkdir zickt rum...

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_mkdir_zickt_rum_139416/page_1 - zur Vollversion wechseln!


semteX schrieb am 23.03.2005 um 23:21

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>";
}

der 1. ordner wird aber erstellt.

OS: (laut phpinfo) System SunOS www 5.9 Generic_112233-08 sun4u
Build Date Feb 28 2005 09:15:06

webspace ist übrigends bei salzburg online.

vielen donk.
semtex


COLOSSUS schrieb am 23.03.2005 um 23:35

Steht doch schon da - Safe Mode Restriction, daran ist das OS nicht (alleine) schuld.

SunOS ist btw nicht Linux. :)


semteX schrieb am 23.03.2005 um 23:56

Zitat von COLOSSUS
Steht 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.


mat schrieb am 24.03.2005 um 00:01

mach mal ein chmod mit param 0777 beim 1. erstellten verz.


semteX schrieb am 24.03.2005 um 00:26

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");

Und WÜRDE SICH BITTE ENDLICH JEMAND IM BEREICH ZELL AM SEE / SCHÜTTDORF WER WEHTUN? ICH FADISIER MICH JETZT SCHON SEIT 3 TAGEN :(


semteX schrieb am 24.03.2005 um 09:55

mat das half leider nix :/ same error.


kleinerChemiker schrieb am 24.03.2005 um 10:45

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?


semteX schrieb am 24.03.2005 um 10:53

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: PHP
function 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 
} 


atrox schrieb am 24.03.2005 um 12:15

Zitat von semteX
Zitat von Deejay2k1
Außerdem ist es eher egal das FF mehr Sicherheitslücken hat, da es wenig Gegener hat wie der IE von MS...
if (!preg_match("/^[0-9]+$/",$_POST["jahr"])) die("someone is playing nasty tricks on me");


semteX schrieb am 24.03.2005 um 13:46

Zitat von atrox
if (!preg_match("/^[0-9]+$/",$_POST["jahr"])) die("someone is playing nasty tricks on me");
thx, das ganze ist zwar eh htaccess geschützt aber schaden tuts nie.


Jehul schrieb am 28.03.2005 um 23:09

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: PHP
if(!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 schrieb am 29.03.2005 um 01:33

Zitat von Jehul
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: PHP
if(!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 :>
führst du all deine Scripts als root aus? :D


Jehul schrieb am 29.03.2005 um 11:05

@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 ;>


watchout schrieb am 29.03.2005 um 12:41

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 ;>
Also, php würd ich aber trotzdem auf keinen Fall als root ausführen... :D

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...


semteX schrieb am 30.03.2005 um 09:56

Zitat von watchout
Also, php würd ich aber trotzdem auf keinen Fall als root ausführen... :D

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...

hm. jo das könnt ich natürlich auch noch tun.

das mitm ftp ist zwar so ne lösung die ganz fein funkt aber wenn wer mal das passwort ändert ist schicht im schacht.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026