2010-10-22 10 views

risposta

108

La modalità viene modificata da il tuo attuale umask, che in questo caso è 022.

Il modo in cui lo umask funziona è sottrattivo. Si prende il permesso iniziale dato al mkdir e sottrarre il umask per ottenere il permesso reale:

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

Se non si vuole che questo accada, è necessario impostare la vostra umask temporaneamente a zero quindi non ha effetto. È possibile farlo con il seguente frammento:

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

La prima riga cambia il umask a zero durante la memorizzazione della precedente in $oldmask. La seconda riga rende la directory utilizzando le autorizzazioni desiderate e (ora irrilevante) umask. La terza riga ripristina lo umask in quello che era in origine.

Vedere il documento PHP per umask e mkdir per ulteriori dettagli.

2

Probabilmente, la vostra umask è impostato per escludere coloro

12

La creazione di file e directory è influenzato dall'impostazione di umask. È possibile creare file con un particolare insieme di permessi manipolando umask come segue: -

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

Per coloro che hanno cercato

mkdir('path', 777);

e non ha funzionato.

È perché, apparentemente, lo 0 che precede la modalità file è molto importante e indica a chmod di interpretare il numero passato come ottale anziché decimale.

Reference

Ps. Questa non è una soluzione alla domanda, ma solo un add-on per l'anwser accettato

0

Evitare l'uso di questa funzione nei server Web con multithreading. È meglio cambiare i permessi dei file con chmod() dopo aver creato il file.

Esempio:

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

mkdir($dir); 
chmod($dir, $permit); 
Problemi correlati