關於64 位PHP 使用PHP_INT_SIZE 輸出得到4 的問題
本地使用phpstudy 得到的結果是4,也就是32 位的PHP,服務器上得到的是8,64 位PHP,沒什麼問題啊,就這麼完了
結果今天來了一個使用wamp 集成環境的,phpinfo()得到的是64 位的,swoole_loader 擴展也安裝成功的了,但是被提示了一句32 位PHP
php版本64位卻得到32位
要來了他使用的集成環境版本: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中,應該不會再出現這個問題了,其他是個別版本