2016-04-20 14 views
2

Ich habe den folgenden Code:mkdir() Erstellen von 0755 statt 0775

function makedirs($dirpath, $mode = 0775, $recursive = true) { 
    return is_dir($dirpath) || mkdir($dirpath, $mode, $recursive); 
} 

$dir = 'path/to/folder/'; 

makedirs($dir, 0775); 

Das Problem ist: auch wenn 0775 oder irgendetwas anderes als Parameter für $mode vorbei, mkdir() 0755 permition Ordner erstellt.

Für exemple der previows Code zurück:

  • Pfad/(0755)
  • zu/(0755)
  • Ordner/(0755)
+0

Überprüfen Sie den umask-Wert. können Sie Umask in die Shell eingeben, um den Maskenwert herauszufinden.Ich schätze, Ihr Umask-Wert ist 022 – user3425867

+0

'$ dir = 'Pfad/zu/Ordner /' Makedirs ($ dir, 0775)' das ist unvollständig, wenn das ist, was Sie wirklich verwenden. Wenn das Pseudocode ist, posten Sie bitte die richtige Syntax. –

+0

'$ mode = 0775' die führende Null wird wahrscheinlich wegen der benutzerdefinierten Funktion als oktal btw behandelt. Versuchen Sie es zu zitieren und das gleiche für drinnen 'makedirs ($ dir, 0775)'. –

Antwort

3

Sie könnten tun die folgenden

function makedirs($dirpath, $mode = 0775, $recursive = true) { 
    $oldMask=umask(002); 
    $status = is_dir($dirpath) || mkdir($dirpath, $mode, $recursive); 
    umask($oldMask); 
    return $status; 
} 

$dir = 'path/to/folder/' 
makedirs($dir, 0775); 

Hinweis: Obwohl Sie umask (0) verwenden können, um sogar 777 Berechtigungen zuzulassen, wird dies nicht empfohlen, da dies Sicherheitsprobleme verursachen könnte.

bearbeiten

Versuchen Sie, den Wert von umask systemweit für alle Benutzer einrichten oder für sich selbst das umask Code von PHP zu entfernen. Obwohl der obige Code funktioniert, wird die Umask in PHP-Skripten nicht empfohlen.

Laut Handbuch Seite PHP

Vermeiden Sie diese Funktion in Multithreaded Webservern verwendet wird. Es ist besser, ändern Sie die Dateiberechtigungen mit Chmod() nach dem Erstellen der Datei. Die Verwendung von umask() kann zu einem unerwarteten Verhalten von gleichzeitig ausgeführten Skripten und dem Webserver führen, da alle die gleiche Umask verwenden.

Sie können Setup umask in/etc/bashrc oder/etc/profile-Datei für alle Benutzer. Standardmäßig ist die meisten Linux Distributionen auf 0022 (022) oder 0002 (002) eingestellt. Öffnen Sie/etc/profile oder ~/.bashrc ein:

# vi /etc/profile

ODER

$ vi ~/.bashrc

Anfügen/eine neue umask folgende Zeile Setup ändern: umask 022

Speichern und schließen Sie die Datei. Änderungen werden nach dem nächsten Login wirksam. Alle UNIX-Benutzer können die System-Umask-Standardeinstellungen in ihrer/etc/profile-Datei, ~/.profile (Korn/Bourne-Shell) ~/.cshrc-Datei (C-Shells), ~/.bash_profile (Bash-Shell) oder ~/.login überschreiben Datei (definiert die Umgebung des Benutzers bei der Anmeldung).

Quelle http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

+0

Ihr Kommentar über 'umask' brachte mich hier: http://php.net/manual/en/function.umask.php, wo das erste Beispiel Ihre Antwort erklärt und kann für andere nützlich sein. – Machado

+1

Es macht mehr Sinn, chmod zu verwenden. Möglicherweise müssen Sie den Umask-Wert Ihres Systems mindestens einmal auf 002 setzen. Sie können Umask in '/ etc/bashrc' oder'/etc/profile' Datei für alle Benutzer einrichten. – user3425867

+0

Nun, ich benutze chmod() nach mkdir(), um dem Ordner aus Sicherheitsgründen die gewünschten Berechtigungen zu geben. – Machado