目录权限检查和更改

时间:2015-10-04 10:41:45

标签: php file-permissions

我希望检查某个文件权限目录,如果它与预定义值不同,则更改。我怎么能这样做?

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

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

2 个答案:

答案 0 :(得分:1)

你可能想要按位和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
}

请注意,没有"八进制值" vs."十进制值" - 整数都是整数,并且可以用不同的符号表示,因此完全可以比较"八进制" $chmod和"十进制" $perms - 实际上它们只是整数。例如,尝试运行以下命令:

var_dump(0644);

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

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

答案 1 :(得分:0)

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



<?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);
?> 
&#13;
&#13;
&#13;