Php 目录权限检查和更改

Php 目录权限检查和更改,php,file-permissions,Php,File Permissions,我想检查某个目录的文件权限,如果它与预定义的值不同,则进行更改。我该怎么做 $dir ="./"; $chmod =0644; $k=fileperms($dir); // $chmod= decoct(intval($chmod)); if ( $k!== $chmod) { chmod($dir ,$chmod); } 注意:我的问题不是关于chmod,如何检查当前权限以及如何将其与定义的值进行比较?因为filep

我想检查某个目录的文件权限,如果它与预定义的值不同,则进行更改。我该怎么做

    $dir ="./";
    $chmod =0644;
     $k=fileperms($dir);
     // $chmod=  decoct(intval($chmod));
     if ( $k!== $chmod) {
         chmod($dir ,$chmod);
    } 

注意:我的问题不是关于chmod,如何检查当前权限以及如何将其与定义的值进行比较?因为fileperms返回5位数(例如40644),而我定义的变量是八进制值和四位数(例如0644)

试试这个,未经测试,因为没有在我的mo计算机上


您可能希望按位和
fileperms的返回值
只获取较低的位,然后比较:

 // Get only the 4 righmost octal digits of the file's permissions
$perms = fileperms($file) & 07777;
$chmod = 0644;

if ($perms !== $chmod) { 
   // do your stuff
}
请注意,没有“八进制值”与“十进制值”之比——整数都是整数,可以用不同的网络符号表示,因此比较“八进制”
$chmod
和“十进制”
$perms
——实际上它们只是整数。例如,尝试运行以下操作:

var_dump(0644);
您得到的是
int(420)
,因为
0644
只是用八进制表示整数值420(十进制)的一种方法。出于同样的原因,这是可行的:

var_dump(0644 === 420);
// Output is bool(true)

我的问题不是chmod,如何检查当前权限以及如何将其与定义的值进行比较?因为fileperms返回5位数(例如40644),而我定义的变量是八进制值和4位数(例如0644).chmod($Folder,0644);必须更改为chmod($Folder,$chmod);所以八进制和十进制的问题就出现了“$chmod”也应该更改。请检查一些示例。其中一些例子解决了你的问题。@luckytaxi我在那里查过了,谷歌搜索了很多。我的问题是关于十进制和八进制值的变化。请阅读我问题的最后部分。这个答案应该会有帮助。忘记第一个数字,把它去掉,用最后四个。