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:
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
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.
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:
Um mögliche Fehlerquellen auszuschließen besteht mein Code nur noch aus folgendem:
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
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 1Um 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:
--rabies.
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
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.
Viel Erfolg noch,
--rabies.
Antwort 6 von Supermax
Das erste Beispiel von rabies dürfte falsch sein.
Korrekt wäre
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.
