目录权限检查和更改

Directory permission check and change

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

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

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

试试这个,未经测试,因为我的电脑上没有,

<?php

 $dir ="./";
 $chmod =0644;

function chmod_r($dir) {
   $dp = opendir($dir);
        while($Folder = readdir($dp)) {
            if($Folder != "." AND $Folder != "..") {
               if(is_dir($Folder)){
                    if(substr(sprintf('%o', fileperms($folder)), -4) !== "0644"){
                chmod($Folder, 0644);
}         
         }
      }
   }
   closedir($dp);
}
chmod_r($dir);
?> 

您可能想要按位和 fileperms 的 return 值来得到它的低位,然后进行比较:

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

if ($perms !== $chmod) { 
   // do your stuff
}

请注意,没有 "octal value" 与 "decimal value" - 整数都是整数,可以用不同的符号表示,因此比较 "octal" $chmod 和 "decimal" $perms - 实际上它们只是整数。例如,尝试 运行 以下内容:

var_dump(0644);

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

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