Php 以二进制设置权限
我在学校看到一个使用二进制字符串设置权限的系统 假设101001=41 因此:Php 以二进制设置权限,php,Php,我在学校看到一个使用二进制字符串设置权限的系统 假设101001=41 因此: 1可以是第1页的权限 2可以是第2页的权限 4可以是第3页的权限 8可以是第4页的权限 16可以是第5页的权限 32可以是第6页的权限 假设我得到了上面的二进制字符串(101001)。我可以访问第1、4和6页 如何在PHP中实现这一点?假设我在MySQL中有一个名为perms的字段存储在12月,那么101001将是41我怎么知道41在PHP中等于1、8和32? 谢谢。这就是二进制的本质——每个数字只有一个1和0的
- 1可以是第1页的权限
- 2可以是第2页的权限
- 4可以是第3页的权限
- 8可以是第4页的权限
- 16可以是第5页的权限
- 32可以是第6页的权限
perms
的字段存储在12月,那么101001将是41我怎么知道41在PHP中等于1、8和32?
谢谢。这就是二进制的本质——每个数字只有一个1和0的组合 PHP注释中的函数用于: 这将使
二进制数组
:
array(1, 8, 32);
您可以使用
&运算符并对照这些标志进行检查
$READ = 8;
$WRITE = 1;
$EXECUTE = 32;
$permissions = 41;
if ($permissions & $READ) {
// do smth
}
if ($permissions & $WRITE ) {
// do smth
}
if ($permissions & $EXECUTE ) {
// do smth
}
让我解释一下。如果你有比特1001(9)。您只需用1001检查第四位(1000)。只需将$permissions变量的每一位与位编号相乘即可。结果将是1000。它可以转换为true
值。所以这里有国旗。如果检查第三位(0100),则结果为0000,为false
值。所以您在这里没有权限。这是一个很好的片段。从这里开始
因为它是二进制和十进制的,所以您可以使用和来回转换它。这只是一个不同的基数
编辑:按位操作很好,这样做^ ^听起来像是在谈论位和按位运算符。最简单的设置方法是为每个权限定义常量
const POST = 1;
const DELETE = 2;
const UPDATE = 4;
const READ = 8;
一旦定义了这些,就可以很容易地使用位运算符进行比较:
$userValue = '1101';
if ($userValue & self::POST) {
echo 'Can Post';
}
if ($userValue & self::DELETE) {
echo 'Can Delete';
}
if ($userValue & self::UPDATE) {
echo 'Can Update';
}
if ($userValue & self::READ) {
echo 'Can Read';
}
这就是PHP自己的常量的工作方式。如果您曾经使用E_ALL&E_DEPRECATED
之类的设置错误报告,那么实际上您正在使用二进制数 谢谢。我更喜欢使用常量而不是变量。非常感谢。我更喜欢常数,这就是我接受另一个的原因。
<?php
$read = 1;
$write = 2;
$readwrite = 16;
$local_admin = 32;
$global_admin = 64;
$jim = 96;
$mike = 16;
echo "Is Mike Allowed to edit? he has an access level of 16<BR>";
if ($mike & 32) {
echo 'YES MIKE CAN EDIT';
} else {
echo 'NO HE CANNOT';
}
echo "<BR><BR>Is Jim Allowed to edit? he has an access level of 96<BR>";
if ($jim & 32) {
echo 'YES JIM CAN EDIT';
} else {
echo 'NO HE CANNOT';
}
?>
const POST = 1;
const DELETE = 2;
const UPDATE = 4;
const READ = 8;
$userValue = '1101';
if ($userValue & self::POST) {
echo 'Can Post';
}
if ($userValue & self::DELETE) {
echo 'Can Delete';
}
if ($userValue & self::UPDATE) {
echo 'Can Update';
}
if ($userValue & self::READ) {
echo 'Can Read';
}