栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

强制PHP整数溢出

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

强制PHP整数溢出

因此,我解决了这个问题,并发现了很多有关PHP的知识(至少在处理Integer溢出的方式方面)。

1)它完全取决于机器在哪个平台上运行,哪个版本的PHP,是否运行Suhosin Hardened
PHP以及为多少(32或64)位编译之间的交叉。6台计算机的行为符合我的预期(实际上是错误的,至少根据他们的文档是错误的),而3台计算机的行为依旧无法解释,而3台计算机的行为则是根据intval命令说的来完成的。文档。

2)当int>
PHP_INT_MAX(不是int和0xffffffff)时,Intval应该返回PHP_INT_MAX,但这仅在某些版本的PHP4和PHP5上发生。当int>
PHP_INT_MAX时,不同版本的PHP返回不同的值。

3)以下代码可以返回3个不同的结果(请参见1):

<?phpecho "Php max int: ".PHP_INT_MAX."n";echo "The Val: ".(-1580033017 + -2072974554)."n";echo "Intval of the val: ".intval(-3653007571)."n";echo "And 0xffffffff of the val: ".(-3653007571 & 0xffffffff)."n";?>

它可以返回(对于Intval似乎正确,但对于&0xffffff则错误)

Php max int: 2147483647The Val: -3653007571Intval of the val: -2147483648And of the val: -2147483648

它可以返回(与intval的PHP文档相矛盾):

Php max int: 2147483647The Val: -3653007571Intval of the val: -641959725And of the val: -641959725

在64位计算机上,它返回(正确):

Php max int: 2147483647The Val: -3653007571Intval of the val: -3653007571And of the val: -641959725

无论如何,我需要一个适用于所有这些平台的解决方案,并且不依赖于使用特定Max
int编译的特定版本PHP的怪癖。因此,我总结了以下跨PHP的threenTwoBitIntval函数:

function thirtyTwoBitIntval($value){    if ($value < -2147483648)    {        return -(-($value) & 0xffffffff);    }    elseif ($value > 2147483647)    {        return ($value & 0xffffffff);    }    return $value;}

评论

我确实认为PHP的设计师应该说一个Int是32位Int,无论它是在32位,64位还是128位计算机上运行(例如DotNet
CLR),并且没有将其随机上转换为浮动取决于PHP编译器所依据的位数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号