php创建多级目录报错,如permission deny;所以自己写了通用的创建多级目录的函数

首先, php创建目录的函数mkdir($dir, $mod , $recursive),该函数也可以递归创建多级目录. 只要在第三个参数$recursive传入true就行.而$mod参数是定义新创建目录的权限值(八进制).

但是我们设置了$mod后实际创建的目录的并非与我们预期一样, 因为最终目录的权限值 = $mod - umask; 而这个umask通常为022, 所以有些情况下, 你创建多级目录时报错权限不足有可能就是减去umask后的权限值不够的.所以我们只要在创建目录时临时将umask值设置为0即可.(但注意官网提示改变umask不建议在多线程中使用,因为他们使用的是同一个umask, 不过我们通常所用的nginx+php-fpm或者Apache+php都是单线程多进程模式,所以不会有这个问题)

最后封装号的函数如下:

 //$dir: 要创建的目录
 //$mod: 新创建目录的权限,要传入8进制数字(八进制数字都是以0开头的数字)
 //返回值: 返回true表示创建成功,false表示创建失败
   function createDir($dir, $mod = 0777)
   {
        $old = umask(0);
        if (is_dir($dir)) {
            return true;
        }
        try {
            return mkdir($dir, $mod, true);
        } catch (\Exception $e) {
            //$e->getMessage()错误信息,此处可以按照自己需要编写记录错误信息日志
            return false;
        } finally {
            umask($old);
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_37281289/article/details/103922754