首页 > 关于php chmod的相关知识

关于php chmod的相关知识

2012-02-09   hisenKing

php给一个文件修改权限的函数chmod

bool chmod ( string $filename , int $mode )

其中的参数mode是需要八进制的,
首先看看php手册中的描述:
注意 mode 不会被自动当成八进制数值,而且也不能用字符串(例如 “g+w”)。要确保正确操作,需要给 mode 前面加上 0:

<?php
chmod("/somedir/somefile", 755);   // 十进制数,可能不对
chmod("/somedir/somefile", "u+rwx,go+rx"); // 字符串,不对
chmod("/somedir/somefile", 0755);  // 八进制数,正确的 mode 值
?>

其中很多人不知道为什么前面要加零,八进制的4000和2000两位是setuid位和setgid位。
如果可执行文件上设置这两位,那么它们能让程序访问运行它们的用户本来无权访问的文件和进程;在某个目录上设置了setgid位以后,在这个目录中新创建的文件具有该目录的属组权限而不是创建该文件的用户的默认权限。
八进制的1000位叫做“粘附位”。如果在目录上设置了这个粘附位,那么除非是该目录属主,该文件的属主或者是超级管理员,否则文件系统不会允许删除或重命名该目录中的文件。在这个目录上拥有写入权限是不够的。
而0755这里的0即代表没有特殊设置。

好久没更新了,需要除除草