很尴尬,为什么phpinfo()
中的 PHP 是 64 位,而获取PHP_INT_SIZE
的值确是 4
就上周的文章:怎么快速判断 PHP 是 32 位还是 64位,可以查看PHP_INT_SIZE
的值来判断 PHP 位数
本地使用 phpstudy 得到的结果是 4,也就是 32 位的 PHP,服务器上得到的是 8,64 位 PHP,没什么问题啊,就这么完了
结果今天来了一个使用 wamp 集成环境的,phpinfo()
得到的是 64 位的,swoole_loader 扩展也安装成功的了,但是被提示了一句 32 位 PHP
要来了他使用的集成环境版本:wampserver3.0.6_x64,本地安装一下,默认 PHP 版本为 5.6.25
既然PHP_INT_SIZE
有问题,那么用 PHP 官方的说法:输出一个超过 42 亿的整数
var_dump(12345678900);
结果居然也是float(12345678900)
,很明显 PHP 是 32 位的
但是为什么phpinfo()
中的 PHP 是 64 位
在 PHP Bugs 官方找到了这么一条 BUG 报告:PHP_INT_SIZE is 4 instead of 8 on 64bit Windows build
emmmm,幸好我当时给温馨提示的时候加了让在phpinfo()
中查看对应位数,如果误报请忽略提示
具体原因可以看一下 PHP 的代码记录,在 PHP 的main/main.c
中查
在PHP 5.6.4中,代码(https://github.com/php/php-src/blob/PHP-5.6.4/main/main.c#L2233)为
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_SIZE", sizeof(long), CONST_PERSISTENT | CONST_CS);
在PHP7中,这里又有了些修改(https://github.com/php/php-src/blob/master/main/main.c#L2176)
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_SIZE", SIZEOF_ZEND_LONG, CONST_PERSISTENT | CONST_CS);
而SIZEOF_ZEND_LONG
的定义,在这里(https://github.com/php/php-src/blob/master/Zend/zend_long.h)
所以,PHP7中,应该不会再出现这个问题了,其他是个别版本
win64下有哪些php5.6是正常的吗?我tm被坑死了。跪求。
@silkapok wampserver这个集成环境是正常的
@沈唁 文中不是说wampserver3.0.6_x64,本地安装一下,默认 PHP 版本为 5.6.25
既然 PHP_INT_SIZE 有问题,那么用 PHP 官方的说法:输出一个超过 42 亿的整数,结果居然也是 float(12345678900),很明显 PHP 是 32 位的 你的意思是虽然是32位,但也可以直接用,没啥影响是吧
$i = 12345678900;
var_dump((int) $i);
win64系统下,使用5.6.9的64位版本,强转整型输出,打印结果:int(-539222988)
而linux环境下,输出结果:int(12345678900)
说明还是有问题的
@简单 嗯 用7就好了,5.6已经不维护了
好吧,,我知道了,,实践证明,x64的PHP5.5.38是不支持的,, 😆
啊,,这个意思是PHP7以下,虽然是X64的,但是PHP_INT_SIZE还是4?
@ldxyiran 不是,是个别5.x的版本会出现这种情况,大部分情况是正常的
@沈唁 这个需要去设置吗?如果支持的话是直接就支持吗?
@ldxyiran 不需要设置,直接用就行了,没啥影响