2011-12-10 36 views
0

在我的代码PHP创建777权限的新目录。怎么样?

$path = 'images/product/'.$pid; 
if(! file_exists($path)) { 
    mkdir($path, 0777); 
} 
... 
... 

,但是当我在终端

drwxr-xr-x 2 www-data www-data 4.0K 2011-12-10 19:28 1/ 

键入

ls -l 

这是我得到的许可,但不是我想要的。

我想允许web用户根据运行时创建的产品ID(目录)上传项目。

我该怎么做?

+3

你真的需要777? *真*?将用户和组的所有权应用于允许该框上的其他用户/组写入该目录会好得多。如果你使用777,所以Apache可以写入目录,那么就没有必要,它已经被'www-data'所有,而任何通过PHP/Apache上传文件的人都已经拥有写权限。 – Tak

+0

我认为没有必要777.感谢您的建议。 –

回答

1

这是因为默认情况下默认情况下,Apache umask默认设置为0022。

由于umask是撤销权限。例如

default 0777 rwx.rwx.rwx 
umask 0022 ---.-w-.-w- 
Final 0755 rwx.r-x.r-x 

有两种方法来解决这个问题,

1. Edit /etc/apache2/envvars 
    add in **umask** *<permission to be revoke>* 
    restart apache 
2. add in umask(0000); before the mkdir('mydir', 0777); 
2

对于777个权限,或任何权限

$path = 'images/product/'.$pid; 
if(! file_exists($path)) { 
    $mask=umask(0); 
    mkdir($path, 0777); 
    umask($mask); 
} 

创建目录...

+0

请注意,不要使用'mkdir($ path,777);'来设置权限,因为它错过了0,导致它被解释为小数。应该使用(http://digitalfortress.tech/php/difference-file-mode-0777-vs-777/)代替。 –