mkdir --> chmod immer 700
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.
<?php
if(is_dir("content/" . $_GET['cat'] . "/" . $_GET['show'] . "_uploads/" . $_GET["id"]) != true) {
mkdir("content/" . $_GET['cat'] . "/" . $_GET['show'] . "_uploads/" . $_GET["id"], 0755); }
?>
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 schreiben
Antwort 1 von rabies vom 30.01.2019, 09:53 Options
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 vom 01.02.2019, 16:07 Options
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 vom 01.02.2019, 16:52 Options
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 vom 01.02.2019, 18:07 Options
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 vom 04.02.2019, 02:49 Options
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 vom 04.02.2019, 09:08 Options
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.