Description du problème :
Utilisez le code php suivant pour créer un répertoire. Les autorisations de répertoire attendues sont 0777, mais le résultat réel est 0755
mkdir('./aa/',0777);
Résultats de l'analyse et des tests :
1 Les autorisations de répertoire spécifiées par la fonction .mkdir() ne peuvent être inférieures ou égales aux autorisations par défaut définies par l'umask système.
Par exemple, l'umask par défaut de Linux est généralement 0022, c'est-à-dire que l'autorisation par défaut pour créer un répertoire est 0755, donc à ce moment php mkdir('./aa/',0777) obtient l'autorisation du répertoire à 0755.
xw@xw-X201:~/Desktop/dd/aa$ umask 0022 xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw/',0777);" xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0755);" xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0747);" xw@xw-X201:~/Desktop/dd/aa$ ll 总用量 20 drwxrwxrwx 5 xw xw 4096 2012-06-01 11:58 ./ drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../ drwxr-xr-x 2 xw xw 4096 2012-06-01 11:57 xw/ drwxr-xr-x 2 xw xw 4096 2012-06-01 11:58 xw1/ drwxr--r-x 2 xw xw 4096 2012-06-01 11:58 xw2/
Modifiez les autorisations par défaut du système à 777, mkdir() peut spécifier des autorisations plus élevées
xw@xw-X201:~/Desktop/dd/aa$ umask 000 xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/',0777);" xw@xw-X201:~/Desktop/dd/aa$ ll 总用量 12 drwxrwxrwx 3 xw xw 4096 2012-06-01 12:08 ./ drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../ drwxrwxrwx 2 xw xw 4096 2012-06-01 12:08 xw2/
2. La fonction chmod() n'est pas affectée par l'umask système et peut définir des autorisations supérieures aux autorisations par défaut du système.
xw@xw-X201:~/Desktop/dd/aa$ umask 0022 xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw1/',0777);" xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw2/');" xw@xw-X201:~/Desktop/dd/aa$ php -r "mkdir('./xw3/');chmod('./xw3/',0777);" xw@xw-X201:~/Desktop/dd/aa$ ll 总用量 20 drwxrwxrwx 5 xw xw 4096 2012-06-01 12:12 ./ drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../ drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw1/ drwxr-xr-x 2 xw xw 4096 2012-06-01 12:11 xw2/ drwxrwxrwx 2 xw xw 4096 2012-06-01 12:12 xw3/
3. La commande mkdir du système peut définir des autorisations supérieures à la valeur par défaut.
xw@xw-X201:~/Desktop/dd/aa$ umask 0022 xw@xw-X201:~/Desktop/dd/aa$ mkdir -m0777 xw xw@xw-X201:~/Desktop/dd/aa$ ll 总用量 12 drwxrwxrwx 3 xw xw 4096 2012-06-01 12:18 ./ drwxr-xr-x 6 xw xw 4096 2012-06-01 11:26 ../ drwxrwxrwx 2 xw xw 4096 2012-06-01 12:18 xw/
Résumé :
Si php souhaite créer un répertoire avec des autorisations de lecture et d'écriture, il est préférable d'utiliser le code suivant. N'utilisez pas directement la fonction mkdir pour spécifier les autorisations. évitez l'impact de l'umask système
mkdir('./xw/'); chmod('./xw/',0777);
Pour plus d'articles connexes sur la fonction mkdir() de PHP pour créer des dossiers et une méthode de définition des autorisations plus sûre, veuillez faire attention au site Web chinois de PHP !