Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

mkdir --> chmod immer 700





Frage

Hey, nutze folgenden Code um in php einen Ordner zu erstellen. Komischerweise hat er immer, egal was ich mache (auch gleich nach der Erstellung nochmal chmod nachgeschoben) CHMOD 700. [code]<?php if(is_dir("content/" . $_GET['cat'] . "/" . $_GET['show'] . "_uploads/" . $_GET["id"]) != true) { mkdir("content/" . $_GET['cat'] . "/" . $_GET['show'] . "_uploads/" . $_GET["id"], 0755); } ?>[/code] Im php Manual steht ja das der Standardwert ohne Angabe des optionalen Mode Parameters bei 755 liegt. Wenn ich den Parameter weglasse hat der Ordner allerdings auch CHMOD 700. Jemand ne Ahnung wo da der Fehler liegen könnte? Grüße, S1lv3R

Antwort 1 von rabies

Das könnte an verschiedenen Dingen liegen; hier einmal ein paar mögliche Fehlerquellen:

Die umask von PHP hat nicht den passenden Mode.
Lösung:
$umask = umask();
// Hier dann deine mkdir-Anweisung
umask($umask);

Das setzt die umask erst einmal zurück (auf 0777) und nach der Anweisung wieder auf die normale, vorherige umask.

Alternativ könntest Du auch mal den absoluten Pfad ausprobieren und/oder vor
content/
noch einen Slash setzen:
/content/


Ansonsten könnten derartige Fehler noch durch die Aktivierung von safe-mode kommen. Dazu könntest Du Dir einmal die Einschränkungen, die unter safe-mode entstehen durchlesen.


Kommen bei der Ausführung noch irgendwelche Warnings, Fehlermeldungen?!

--rabies.

Antwort 2 von S1lv3R

Hi.
Also wenn ich es mit anführendem Backslash versuchen bekomme ich folgende Fehlermeldung:
Warning: mkdir(/uploadtest/) [function.mkdir]: Permission denied in /var/www/.../test.php on line 1

Um mögliche Fehlerquellen auszuschließen besteht mein Code nur noch aus folgendem:
<?php mkdir("/uploadtest/",0755);  ?>

Dein Tipp mit umask hat leider auch nicht geholfen und der safemode ist deaktiviert. Php Version ist 4.4.4-0. php, phpinfo hier.
Wenn mich die Fehlermeldung oben nicht weiterbringt werd ich mich wohl direkt an meinen Provider wenden müssen.
Grüße,
S1lv3R

Antwort 3 von rabies

In der Info hab ich soweit nichts auffälliges gefunden.

Und wie sieht's mit dem absoluten Pfad aus?

Also:
/var/www/web65/html/dgnsa/ordner/zum/projekt/
?

--rabies.

Antwort 4 von S1lv3R

Ne, verändert leider auch nichts. :(
Habe jetzt den Support angeschrieben, bin schon gespannt auf die Antwort, vermutlich irgendein Berechtigungsproblem.
Und wenn das nicht hilft werden die Dateien eben als Notlösung mit Blob in der DB gespeichert - meinen Provider wirds freuen.
Was sagt denn die Fehlermeldung von oben aus? Ist der Backslash falsch oder woher kommt das?
Grüße,
S1lv3R

Antwort 5 von rabies

Sagt aus, dass der Benutzer, mit dem PHP ausgeführt wird (z.B. wwwrun, apache, nobody - je nach Webserverkonfiguration) nicht die Berechtigung hat, einen Ordner in dieser Höhe der Hierarchie zu erstellen. /uploadtest/ wird versucht ganz oben im Verzeichnisbaum anzulegen. Geht aber nicht, da das in der Regel nur der Benutzer root darf. Deswegen die Empfehlung mit dem absolutem Pfad. Aber da das auch nicht funktioniert, bin ich ratlos.

Viel Erfolg noch,
--rabies.

Antwort 6 von Supermax

Das erste Beispiel von rabies dürfte falsch sein.

Korrekt wäre
$oldmask = umask(0777);
// weiterer Code hier
umask($oldmask);


umask()
ohne Parameter gibt nämlich nur die aktuelle umask zurück, ohne die umask zu ändern.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: