2015-10-04 112 views
-1

我想检查文件权限的某个目录,如果它与预先定义的值不同,则更改它。我怎样才能做到这一点?目录权限检查和更改

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

注:我的问题是不是CHMOD,我怎么能检查当前权限和如何与我定义的值进行比较呢?因为fileperms返回5位数字(例如40644),我定义的变量是八进制值和四位数字(例如0644)。

+0

检查一些例子。 http://php.net/manual/en/function.fileperms.php一些例子解决你的问题。 – luckytaxi

+0

@luckytaxi我在那里检查并充分googlized。我的问题是关于十进制和八进制值的变化。请阅读我的问题的结尾部分。 – Huseyin

回答

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 
} 

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

var_dump(0644); 

你得到int(420)因为0644只是代表八进制整数值420(十进制)的一种方式。出于同样的原因,这可以工作:

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

这个答案应该有所帮助。忘掉第一个号码,把它拿出来,用最后四个号码。 – luckytaxi

+0

这个答案解决了我的问题。谢谢@shevron – Huseyin

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); 
 
?>

+0

我的问题不在于chmod,我如何检查当前权限以及如何将其与我定义的值进行比较?由于fileperms返回5位数字(例如40644),我定义的变量是八进制值和四位数字(例如0644)。编辑 – Huseyin

+0

,尝试上面的 – Billy

+0

chmod($ Folder,0644);必须改为chmod($ Folder,$ chmod);所以会出现八进制和十进制的问题。 !==“$ chmod”也应该改变。 – Huseyin