Php 在32位服务器上键入强制转换大整数

Php 在32位服务器上键入强制转换大整数,php,Php,我有以下代码 <?php $id=3001957093; //between 1 and 4,294,967,295 echo($id."\n".(int)$id."\n"); 在我的x86_64 Centos PHP版本5.5.24开发物理盒上,int$id与$id相同。但在我的i386 Centos PHP版本5.5.18生产虚拟服务器上,int$id为-1293010203 阅读,我明白了: 整数的大小取决于平台,尽管是最大值 大约20亿是通常的32位有符号值。 64位平台的最大值

我有以下代码

<?php
$id=3001957093; //between 1 and 4,294,967,295
echo($id."\n".(int)$id."\n");
在我的x86_64 Centos PHP版本5.5.24开发物理盒上,int$id与$id相同。但在我的i386 Centos PHP版本5.5.18生产虚拟服务器上,int$id为-1293010203

阅读,我明白了:

整数的大小取决于平台,尽管是最大值 大约20亿是通常的32位有符号值。 64位平台的最大值通常约为9E18,但上除外 PHP7之前的Windows,它始终是32位的。PHP没有 支持无符号整数。整数大小可以使用 常量PHP_INT_SIZE,使用常量PHP_INT_MAX的最大值 由于PHP4.4.0和PHP5.0.5,最小值使用常量 自PHP7.0.0以来的PHP_INT_MIN

啊哈,这就解释了

在32位服务器上,如何确保1和4294967295之间的数字是整数


如果转换后的值为-1293010203,我如何判断原始数字是什么,即3001957093?

如果它不适合整数,则不能使用整数。句点。@KarolyHorvath is_int将不起作用,因为该数字将被转换为浮点。给定转换后的浮点值,可以确定原始值吗?@user1032531不可靠。在64位上,9.2233720368548E+18==9.2233720368548E+18+1为真。