0%

PHP mkdir permission denied

$name = '/uploads/' . date('Y') . '/' . date('m') . '/' . date('d') . '/' . uniqid() . '/';

mkdir($name , 0777 , true);

php中使用上述代码在创建多级目录的时候,在windows能够正常运行,但部署到Linux/Unix下面就会报Perssion Denied,这是为什么呢?

这是因为在Linux系统中创建文件/文件夹会受到umask的影响,当umask设置为022时,实际PHP创建的0777目录权限就会变成0755。

解决办法也很简单:

$dir = '/uploads/' . date('Y') . '/';

if (!file_exists($dir)) {

mkdir($dir , 0777 , true);

chmod($dir , 0777);

}

$dir = $dir . date('m') . '/';

if (!file_exists($dir)) {

mkdir($dir , 0777 , true);

chmod($dir , 0777);

}

$dir = $dir . date('d') . '/';

if (!file_exists($dir)) {

mkdir($dir , 0777 , true);

chmod($dir , 0777);

}

$dir = $dir . uniqid() . '/';

if (!file_exists($dir)) {

mkdir($dir , 0777 , true);

chmod($dir , 0777);

}