当前位置: 代码迷 >> 综合 >> php创建多级目录报错,如permission deny;所以自己写了通用的创建多级目录的函数
  详细解决方案

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

热度:94   发布时间:2024-01-24 21:48:51.0

首先, 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);}}
  相关解决方案