为什么不';在php中,大的乘法会导致缓冲区溢出

为什么不';在php中,大的乘法会导致缓冲区溢出,php,buffer-overflow,Php,Buffer Overflow,在一段代码中,我看到了一个函数,它本质上以参数形式获取一个数字,表示一个时间,并将其相乘,以秒为单位获得其值 在我看来,在这种情况下,缓冲区溢出是可能的;如果输入一个足够大的数字,当它相乘时会导致缓冲区溢出。然而,在四处窃听,试图输入越来越大的数字后,我无法生成它 我的问题是,PHP在这种情况下是如何防止缓冲区溢出的 我认为这可能与php中的内存分配限制有关,但我也继续将其增加到接近无穷大,但仍然没有缓冲区溢出。请参阅文档中的示例,参考: 如果PHP遇到超出整数类型边界的数字,则 将被解释为浮动

在一段代码中,我看到了一个函数,它本质上以参数形式获取一个数字,表示一个时间,并将其相乘,以秒为单位获得其值

在我看来,在这种情况下,缓冲区溢出是可能的;如果输入一个足够大的数字,当它相乘时会导致缓冲区溢出。然而,在四处窃听,试图输入越来越大的数字后,我无法生成它

我的问题是,PHP在这种情况下是如何防止缓冲区溢出的


我认为这可能与php中的内存分配限制有关,但我也继续将其增加到接近无穷大,但仍然没有缓冲区溢出。

请参阅文档中的示例,参考:

如果PHP遇到超出整数类型边界的数字,则 将被解释为浮动。还有,一个操作 结果将返回超出整数类型边界的数字 而是一个浮子

如果
var\u dump
输出返回值,您可能会注意到它已被转换为浮点而不是整数(假设您实际得到的结果导致整数溢出)

整数的最大大小也取决于平台-32位机器上整数的最大大小为2147483647,但64位机器上整数的最大大小为9223372036854775807

更新

从有关浮点类型的文档中:

浮点数的大小取决于平台,但最大值为 ~1.8e308的精度约为14位小数是常见的 值(64位IEEE格式)


也就是1.8 x 10^308,或者18后跟307个零(比整数多出很多)

为什么乘以一个数字会导致缓冲区溢出?你知道什么是“缓冲区”吗?你可能把缓冲区溢出和整数溢出混淆了。“内存分配到无穷大!”对不起,看到了,想到了一些编程星际飞船船长。缓冲区溢出是一个bug。这不应该发生。这不是在这里发生的,所以这是一件好事。谢谢你的答案观察者。这是一个有点幼稚的问题,但如果我输入了一个连浮点都无法处理的大得离谱的数字,该怎么办?它必须是一个非常大的数字,但我怀疑您的操作会返回一个NaN结果,您可以使用
is_NaN()
进行检查,它将给出一个。。。。e、 g.
$result=1.0e308*1.0e308)