目录权限检查和更改
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)
我想检查某个目录的文件权限,如果它与预定义的值不同则更改。我该怎么做?
$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)