# Problem bei Ordner erstellen mit PHP + upload



## soraxdesign (13. Dezember 2002)

Hi guys,
haben problem. Nachfolgend ein Stück aus meinem Uploadscript, wo ein paar ordner erstellt werden sollen. Das Problem ist das: Es wid ein Ordner erstellt mit dem Name "Ordner_1" (anahnd der ID aus der "index.dat" ). Dieser hat auch die rechte 777. Somit müsste es mir doch erlaubt sein *in* diesem Ordner weitere Ordner mit den gleichen Rechten zu erstellen und auch Datein, oder? Naja jedenfalls macht ers net. Auf meinem Server habichs getestet und der labert immer was von SAFE MODE Restriction in effect. Ich weiss was das heisst, aber es wird ja trotzdem ein Ordner name "ordner_" erstellt laso muss es ja trotzdem klappen.

Also nochma kurz: Wieso kann ich in einem per PHP erstellten neuen Ordner mit den Rechten 777 keinen neuen Ordner erstellen?

Hier noch der Code:


```
277 $fp=fopen("index.dat","r");
278 $inhalt=fgets($fp,1000);
279 $zeile=explode("|||",$inhalt);
280 fclose($fp);
281 $nummer=$zeile[0]+1;
282 $dirname="Ordner_$nummer";
283 if(!file_exists("news/$dirname"))
284 {
285 mkdir("news/$dirname/", 0755);
286 chmod("news/$dirname/", 0777);
287 mkdir("news/$dirname/bilder/",0755);
288 chmod("news/$dirname/bilder/", 0777);
289 mkdir("news/$dirname/thumbs/", 0755);
290 chmod("news/$dirname/thumbs/", 0777);
291 $datei=fopen("news/$dirname/bilder.txt","w+");
292 fclose($datei);
293 chmod("news/$dirname/bilder.txt", 0777);
294 }
```

Ich bekomm immer nen Fehler u.a. in den Zeilen (der rest der fehlermeldung ist die selbe, bezieht sich jedoch auf den anderen Ordner, der erstellt werden solle, "thumbs"):

*SAFE MODE Restriction in effect. The script whose uid is 41230 is not allowed to access news/Ordner_1/bilder owned by uid 30 in /home/www/.../adminnews.php on line 287*

*Warning: Unable to access news/Ordner_1/bilder/ in /home/www/.../adminnews.php on line 288*

*Warning: chmod failed: No such file or directory in /home/www/.../adminnews.php on line 288*

usw.

danke im vorraus
sabre


----------



## THE REAL TOOLKIT (13. Dezember 2002)

Wies in der Fehlermeldung steht.
Der Safe Mode ist in der php.ini auf 1 wodurch das erstellen der directorys bzw. das chmoden nicht geht.

Edit: oh, *g*


----------



## punknroll (3. Januar 2005)

hi! ich hab das selbe problem: 
ich kann zwar mit 

$oldumask = umask(0); 
if(mkdir($_SERVER['DOCUMENT_ROOT']."/modules/galerie/data/".$dir, 0777)){
 echo "Verzeichnis ".$_SERVER['DOCUMENT_ROOT']."/modules/galerie/data/".$dir." wurde erfolgreich erstellt!<br>";
}
umask($oldumask);

erfolgreich einen Ordner erstellen. der hat dann auch 0777. das passt soweit. aber wenn ich gleich im anschluss noch einen ordner darin erstellen will zb:
$_SERVER['DOCUMENT_ROOT']."/modules/galerie/data/".$dir."/thumbs"

bekomme ich die safe mode fehlermeldung:

SAFE MODE Restriction in effect. The script whose uid is 1524 is not allowed to access blabal/galerie/data/test owned by uid 33 ....

es würde mir ja einleuchten, wenn wegen safe mode das erstellen überhaupt nicht möglich wäre, aber es scheint so, dass der zweite mkdir befehl wegen chmod nicht klappt. da muss es doch ne lösung geben oder?


----------



## sparco (3. Januar 2005)

sabre hat gesagt.:
			
		

> hm wenn du gelesen hättest, dass ich schon ein verzeichnis erstellt habe mit den rechten 777 (per mkdir() ), würdeste das net posten. ich wollte wissen warum ich in diesem ordner nicht weitere ordner erstellen kann?


Aber THE REAL TOOLKIT hat Recht: Die Fehlermeldung zeigt an, DAS DU ORDNER_1 WEGEN KEINEN RECHTE NICH BETRETEN KANNST.


----------



## punknroll (3. Januar 2005)

das ist der einzige workaround, den ich jetzt gefunden habe:
diese Funktion kann man so oft aufrufen, wie man will...also auch zweimal hintereinander
um subdirs zu erzeugen.

```
// create directory through FTP connection 
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 
}
```


----------



## teinze (27. Januar 2005)

Hallo Sabre,

 das Problem ist folgendes: PHP ist es im Safe-Mode nur gestattet, neue Ordner anzulegen in Ordnern, die NICHT durch PHP angelegt wurden. Also in solchen, die z.B. durch FTP entstanden sind. (Das ist z.B. der Ordner, in dem du "Ordner_1" anlegst.) Diese gehören einem bestimmten user. 
 Da das PHP-Script einen anderen user repräsentiert (häufig "wwwrun" oder ähnlich) wird der neue Ordner DIESEM user gehören. In dem allerdings ist das anlegen von Ordnern nicht gestattet. Auch das wechseln des user oder der usergroup für einen Ordner oder eine Datei ist per PHP nicht möglich.

  Beste Grüße
  René
  r.teinze at buero-digitale.de


----------



## zorromaus (4. Mai 2005)

die antwort ist zwar richtig @teinze, sorry aber leider nur eine teilantwort.

ich habe seit heute zum ersten mal das selbe problem, und mich damit auch erstmal befassen müssen und durchs i-net "gegoogelt" um mich da schlau zu machen.
große hoster habe ich festgestellt, (z.b.1&1) haben safe_mode immer auf "off". somit also kein problem bei mkdir, chmod usw.

was aber wirklich interessant sein könnte, wäre zu erfahren ob es doch noch irgendwie einen lösungsansatz gibt wie man dieses safe_mode: "on" umgehen kann, um doch an das ziel zu kommen?

gruß Z


----------



## Dennis Wronka (4. Mai 2005)

Man kann im SafeMode Verzeichnisse in Verzeichnissen anlegen die durch PHP angelegt wurden. (schicke Satzkonstruktion)
Mach ich auch, kein Problem.


----------



## teinze (7. Mai 2005)

@zorromaus und @reptiler -

 es ist durchaus möglich, in einem Ordner, der durch PHP angelegt wurde, einen weiteren Ordner zu erstellen. Nur ist das davon abhängig, welchen User und welche Gruppe das PHP-Script SELBST darstellt. Denn die Rechte dieses Users bzw. dieser Gruppe regeln, ob und wo neue Ordner angelegt werden dürfen. Und das wiederum ist davon abhängig, wie das System konfiguriert ist. Deshalb kann es durchaus sein, dass es bei einigen Providern klappt.

    Beste Grüße
    René

http://www.buero-digitale.de


----------

