php无法创建0777权限的文件夹的解决方案

mac2024-05-30  34

1、mkdir(path,mode,recursive,context)

参数描述path必需。规定要创建的目录的名称。mode必需。规定权限。默认是 0777。recursive必需。规定是否设置递归模式。context必需。规定文件句柄的环境。Context 是可修改流的行为的一套选项。

使用mkdir创建文件夹时,发现这个函数有两个参数,第二个参数是为新创建的文件夹指定权限,但是如果直接用: mkdir('文件地址', 0777); 时 发现新文件夹的权限并不是777,一般情况下会是022,因为mkdir在给文件夹制定权限时,会跟当前登录操作系统用户的umask(用户缺省权限属 性)值进行位“与”,得到的值才是最终权限值,所以,如果用户umask是022(一般默认是这个),即:000 010 010 在于mkdir指定的777 ,即:111 111 111 位“与”后,得到的真实权限为:022。 如果想让新建文件夹权限最大,有两种方法可以实现:(当然,是在当前用户能赋予最高权限的条件下)

2、修改用户umask,php提供有umask函数:

    umask(mask)

参数描述mask可选。规定新的权限。默认是 0777。

mask 参数由四个数字组成:

第一个数字通常是 0第二个数字规定所有者的权限第三个数字规定所有者所属的用户组的权限第四个数字规定其他所有人的权限

可能的值(如需设置多个权限,请对下面的数字进行总计):

1 = 执行权限2 = 写权限4 = 读权限

$oldumask=umask(0);  mkdir('test',0777);  umask($oldumask);  这种方法看起来一劳永逸,在脚本开头文件里指定下umask值,后面直接用mkdir就可以控制权限,需要注意的是:在多线程服务器上使用umask函数时,多个线程会公用一个umask,所以可能会造成混乱。

3、使用chmod函数,这也是最常用的方法:

    chmod(file,mode)

参数描述file必需。规定要检查的文件。mode

可选。规定新的权限。

mode 参数由 4 个数字组成:

第一个数字永远是 0第二个数字规定所有者的权限第二个数字规定所有者所属的用户组的权限第四个数字规定其他所有人的权限

可能的值(如需设置多个权限,请对下面的数字进行总计):

1 - 执行权限2 - 写权限4 - 读权限

mkdir('文件地址', 0777);  chmod('文件地址', 0777);  最后,需要注意一点,权限值最好使用八进制表示,即“0”开头,而且一定不要加引号。

最新回复(0)