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

时间:2014-02-04 15:48:35

标签: php gmp

我有一个不断运行的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);
}

1 个答案:

答案 0 :(得分:0)

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限制。