$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);
}