it-swarm.com.de

Warum kann PHP kein Verzeichnis mit 777 Berechtigungen erstellen?

Ich versuche, ein Verzeichnis auf meinem Server mit PHP mit dem folgenden Befehl zu erstellen:

mkdir("test", 0777);

Es gibt jedoch keine vollständigen Berechtigungen, nur diese:

rwxr-xr-x
54
Sjwdavies

Der Modus wird von Ihrem aktuellen umask geändert, in diesem Fall 022.

Die Funktionsweise von umask ist subtraktiv. Sie nehmen die anfängliche Erlaubnis für mkdir und subtrahieren die umask, um die tatsächliche Erlaubnis zu erhalten:

  0777
- 0022
======
  0755 = rwxr-xr-x.

Wenn dies nicht geschehen soll, müssen Sie umask vorübergehend auf Null setzen, damit dies keine Auswirkungen hat. Sie können dies mit dem folgenden Snippet tun:

$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);

In der ersten Zeile wird umask auf Null gesetzt, während die vorherige Zeile in $oldmask Gespeichert wird. In der zweiten Zeile wird das Verzeichnis mit den gewünschten Berechtigungen und (jetzt irrelevant) umask erstellt. In der dritten Zeile wird der ursprüngliche Zustand von umask wiederhergestellt.

Weitere Informationen finden Sie im Dokument PHP für mask und mkdir .

135
paxdiablo

Die Erstellung von Dateien und Verzeichnissen wird durch die Einstellung von umask beeinflusst. Sie können Dateien mit bestimmten Berechtigungen erstellen, indem Sie umask wie folgt bearbeiten:

$old = umask(0);
mkdir("test", 0777);
umask($old);
13
Steve Weet

Vermeiden Sie die Verwendung dieser Funktion in Multithread-Webservern. Es ist besser, die Dateiberechtigungen nach dem Erstellen der Datei mit chmod () zu ändern.

Beispiel:

$dir = "test";
$permit = 0777;

mkdir($dir);
chmod($dir, $permit);
5

Wahrscheinlich ist Ihr mask so eingestellt, dass diese ausgeschlossen werden

2

Für diejenigen, die es versucht haben

mkdir('path', 777);

und es hat nicht funktioniert.

Offenbar ist die 0 vor dem Dateimodus sehr wichtig, was chmod anweist, die übergebene Zahl als Oktal statt als Dezimalzahl zu interpretieren.

Referenz

Ps. Dies ist keine Lösung für die Frage, sondern nur eine Ergänzung zu der akzeptierten Antwort

1
Niket Pathak