我希望检查某个文件权限目录,如果它与预定义值不同,则更改。我怎么能这样做?
$dir ="./";
$chmod =0644;
$k=fileperms($dir);
// $chmod= decoct(intval($chmod));
if ( $k!== $chmod) {
chmod($dir ,$chmod);
}
注意:我的问题不是关于 chmod ,如何检查当前权限以及如何将其与我定义的值进行比较?因为 fileperms 返回5位数(例如40644),我定义的变量是八进制值和四位数(例如0644)。
答案 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;