首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中最多63位?

PHP中最多63位?
EN

Stack Overflow用户
提问于 2014-02-06 16:55:40
回答 1查看 196关注 0票数 1

我正在构建一个系统,在这个系统中,我需要为用户分配特定(个人)资产的访问权限。这些资产(可能有数以万计)。

我想用按位比较来实现,比如,如果用户能够访问资产1和2,则存储3的值,访问1、2和3的值为7,等等。

访问不一定是连续的,因此用户可以很容易地访问资产10、12和24324。

我很快就遇到了一个问题,在使用比特时,服务器不会获取超过第63位的资产,所以很明显,我要么误解了什么,要么比特是存储此类信息的愚蠢方式。

我的代码运行在64位Linux系统上,它是(显然只是为了测试目的,只是为了发现这样的限制):

代码语言:javascript
复制
<?php

$bitwise = $_GET['bitwise'];

if (isset($bitwise)) {

    echo "<br/>bitwise input: ";
    echo $bitwise;
    $bitcount = 0;
    for ($i=1;$i<=$bitwise;$i*=2) {

        if (($i & $bitwise) > 0) {

            $bitcount++;
            echo "<br/>{$bitcount}: " . $i . " is in " . $bitwise;

        }

    }

}

?>

我通过查询字符串输入测试值。但是,不管我输入了什么值,我可以得到的最大计数是63。

所以,我的问题是:这仅仅是因为我用了按位进行比较,而这些比较并不理想(我的理论),还是我的实现是错的呢?

我的下一个解决方案是将“位”存储在数组中,因此,如果有人能够访问资产1、2和3,我会将他们的列表存储为1,2,3。不太可能有人拥有超过100种特定资产的权限。这样做合理吗?我意识到这在一定程度上使这个问题进入了值得讨论的领域,但希望它仍然足够具体。

当然,如果服务器必须同时为大量客户端提供服务,那么派拉蒙关注的是性能。

(如果适用,请原谅错误的术语,希望我的意思是清楚的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-06 18:36:36

这是标准行为- on 64位编译的PHP,整数的最大长度为64位。虽然它温暖了我的秘密灰胡子心,如果你有超过64个不同的角色,一个按位的解决方案是错误的访问控制。

还有两件事值得一提。

首先,出于性能原因,这样做对web应用程序来说可能是一个过早的优化。ACL查找在很长一段时间内都不会成为系统的瓶颈。此外,考虑到该语言的动态类型特性,不清楚按位运算符是否提供了那么多PHP性能好处。

其次,你被限制在63位的原因是因为PHP (似乎?)使用二人恭维实现有符号整数。最后一位代表正数或负数。我问这个问题关于前一段时间按位的NOT,这就是为什么这个问题引起了我的注意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21609144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档