PHP中资源ID的最大值是多少?

PHP中资源ID的最大值是多少?,php,gmp,Php,Gmp,我有一个经常运行的PHP脚本(或者至少应该如此)。这是一个简单的程序,可以循环数字并测试它们的素性。不幸的是,此脚本大约每12小时崩溃一次,出现以下错误: "PHP Warning: gmp_strval(): -2147483648 is not a valid GMP integer resource" 我猜在将此资源分配给变量时,我超过了资源ID max值,并且当脚本尝试针对该变量运行函数时,它崩溃了 那么,最大资源ID是多少?更重要的是,我如何避免这个问题 代码有点长,但我会尽量告诉

我有一个经常运行的PHP脚本(或者至少应该如此)。这是一个简单的程序,可以循环数字并测试它们的素性。不幸的是,此脚本大约每12小时崩溃一次,出现以下错误:

"PHP Warning:  gmp_strval(): -2147483648 is not a valid GMP integer resource"
我猜在将此资源分配给变量时,我超过了资源ID max值,并且当脚本尝试针对该变量运行函数时,它崩溃了

那么,最大资源ID是多少?更重要的是,我如何避免这个问题

代码有点长,但我会尽量告诉您要点:

$NumberToTest = gmp_init("$StartingString",10);
/* Time to test for primality */
while(1)
{
// Test $NumberToTest for primality.
$NumberToTest = gmp_add($NumberToTest,2);
}

PHP不会在内部重复使用资源ID,因此最终您会发现PHP在使用这些ID时出现问题,从而导致出现警告。看。由于PHP中有很多东西会注册资源,从而增加资源ID,因此在长时间运行的脚本中很容易遇到此错误


最大ID取决于您的体系结构。您可以打印常量PHP_INT_MAX来获取安装的数字,但在32位系统上,它通常是2147483647。在64位系统上,它要高得多。我的指纹是9223372036854775807。您不太可能耗尽64位系统上的资源ID限制。

由于-2147483648是32位系统上的PHP_INT_MAX+1,我建议最大值可能是PHP_INT_MAX。。。。如果您可以切换到64位版本的PHP,它可能会消除这个问题。我在一个64位系统上,这里是“PHP-v”的输出:PHP5.5.3-1ubuntu2.1(cli)(构建:2013年12月12日04:24:35)版权(c)1997-2013 PHP组Zend Engine v2.5.0,版权(c)1998-2013 Zend Technologies with Zend OPcache v7.0.3-dev,版权(c)1999-2013,由Zend Technologies出版