欢迎各位兄弟 发布技术文章
这里的技术是共享的
// List of all Serv-U file and directory permissions values $intServUFileRead = 1; $intServUFileWrite = 2; $intServUFileAppend = 4; $intServUFileDelete = 8; $intServUFileRename = 16; $intServUFileExecute = 32; $intServUFolderList = 256; $intServUFolderCreate = 512; $intServUFolderRemove = 1024; $intServUFolderRename = 2048; $intServUSubfolderInherit = 4096; // To use these, sum them and apply $intTestReadWriteList = $intServUFileRead + $intServUFileWrite + $intServUFolderList; echo "Serv-U Permission Value is ".$intTestReadWriteList; 如何根据 $intTestReadWriteList 值分解成权限
根据 $intTestReadWriteList 值将其分解为权限,您可以使用位运算符来检查每个权限是否存在。
例如,假设 $intTestReadWriteList 的值为 259,表示具有文件读取、写入和文件夹列表权限。您可以使用位运算符按以下方式分解权限:
php
if ($intTestReadWriteList & $intServUFileRead) { echo "File Read permission is granted.<br>"; } if ($intTestReadWriteList & $intServUFileWrite) { echo "File Write permission is granted.<br>"; } if ($intTestReadWriteList & $intServUFolderList) { echo "Folder List permission is granted.<br>"; }
您可以继续添加其他权限检查以检查是否具有其他权限。这样,您可以根据 $intTestReadWriteList 值分解出哪些权限被授予。
$intServUFileRead = 1;
$intServUFileWrite = 2;
$intServUFileAppend = 4;
$intServUFileDelete = 8;
$intServUFileRename = 16;
$intServUFileExecute = 32;
$intServUFolderList = 256;
$intServUFolderCreate = 512;
$intServUFolderRemove = 1024;
$intServUFolderRename = 2048;
$intServUSubfolderInherit = 4096;
// To use these, sum them and apply
$intTestReadWriteList = $intServUFileRead + $intServUFileWrite +
$intServUFolderList;
echo "Serv-U Permission Value is ".$intTestReadWriteList; 如何根据 $intTestReadWriteList 值分解成权限
根据给定的代码,$intTestReadWriteList
是通过将 $intServUFileRead
、$intServUFileWrite
和 $intServUFolderList
这三个权限值相加得到的。具体数值分配如下:
$intServUFileRead
的值是 1
$intServUFileWrite
的值是 2
$intServUFolderList
的值是 256
因此,计算 $intTestReadWriteList
的值为:
1$intTestReadWriteList = $intServUFileRead + $intServUFileWrite + $intServUFolderList
2 = 1 + 2 + 256
3 = 261
所以,$intTestReadWriteList
的值是 261,这表示该权限集合包括文件读取、文件写入和目录列表三项权限。
由 $intTestReadWriteList 的值是 261,,如何进行分解呢
要从 $intTestReadWriteList
的值(261)分解出它是由哪几个原始权限值相加得到的,可以通过与(&)运算符逐一检查每个可能的权限值。具体步骤如下:
确定每一位代表的原始权限:
最低位(第0位)代表 $intServUFileRead
,值为 1。
下一位(第1位)代表 $intServUFileWrite
,值为 2。
依此类推,直到更高位数,其中 $intServUFolderList
在较高的位上,值为 256。
使用按位与运算进行检查:
要检查是否包含某个权限,可以将 $intTestReadWriteList
与那个特定的权限值进行按位与运算。如果结果非零,则说明原始权限集合中包含了这个权限。
下面是具体的分解过程:
检查 $intServUFileRead
(值为 1)是否包含在内:
Php
($intTestReadWriteList & $intServUFileRead) != 0 // 即 (261 & 1) != 0,结果为 true,说明包含读权限。
检查 $intServUFileWrite
(值为 2)是否包含在内:
Php
($intTestReadWriteList & $intServUFileWrite) != 0 // 即 (261 & 2) != 0,结果为 true,说明包含写权限。
检查$intServUFolderList
(值为 256)是否包含在内:
Php
($intTestReadWriteList & $intServUFolderList) != 0 // 即 (261 & 256) != 0,结果为 true,说明包含目录列表权限。
由于直接计算已经告诉我们结果是 261,并且我们知道每个权限的二进制表示方式,这里直接通过逻辑推理和对二进制的理解来分解,而不需实际执行代码检查,就能确定 261 是由 1(读)、2(写)和 256(目录列表)这三个权限相加得到的。