2015-10-04 87 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