我有一个经常运行的PHP脚本(或者至少应该运行)。这是一个简单的程序,循环遍历数字并测试它们的质数。不幸的是,这个脚本大约每隔12个小时就会崩溃一次,错误如下:
"PHP Warning: gmp_strval(): -2147483648 is not a valid GMP integer resource"我猜我在将这个资源赋值给一个变量时超过了资源ID的最大值,当脚本试图对该变量运行函数时,它就会崩溃。
那么,最大资源ID是多少?更重要的是,我如何避免这个问题?
代码有点长,但我会试着给你大意:
$NumberToTest = gmp_init("$StartingString",10);
/* Time to test for primality */
while(1)
{
// Test $NumberToTest for primality.
$NumberToTest = gmp_add($NumberToTest,2);
}发布于 2014-04-14 07:31:59
PHP不会在内部重用资源ID,因此最终会在PHP使用完它们时遇到问题,从而导致出现警告。请参阅bug report。由于PHP中的一堆东西将注册资源,从而递增资源ID,因此在长时间运行的脚本中很容易遇到此错误。
最大ID取决于您的架构。您可以打印常量PHP_INT_MAX来获取安装编号,但在32位系统上,它通常是2,147,483,647。这在64位系统上要高得多。我的打印输出9,223,372,036,854,775,807。您不太可能在64位系统上耗尽资源ID限制。
https://stackoverflow.com/questions/21556963
复制相似问题