如果脚本以32位或64位运行,有没有人知道在PHP中检查的方法?目前我正在使用PHP 5.3.5。
理想情况下,我想写一个函数,所以我的代码看起来像这样:
if( is_32bit() === true ) {
do_32bit_workaround();
}
do_everything_else();
有人有任何想法吗?
答案 0 :(得分:83)
检查PHP_INT_SIZE
常数。它将根据寄存器的大小而变化(即32位与64位)。
在32位系统中,PHP_INT_SIZE
应 4 ,对于64位,它应 8 。
有关详细信息,请参阅http://www.php.net/manual/en/language.types.integer.php。
答案 1 :(得分:7)
你可以写一个这样的函数:
function is_32bit(){
return PHP_INT_SIZE === 4;
}
然后你可以使用你发布的示例代码:
if ( is_32bit() ) {
do_32bit_workaround();
} else {
do_everything_else();
}
答案 2 :(得分:1)
获取位数的简短方法。
strlen(decbin(~0));
这是如何运作的:
按位补码运算符,波浪号,〜,翻转每一位。
@see http://php.net/manual/en/language.operators.bitwise.php
在 0 上使用此功能可在每个位上切换整数。
这为您提供了PHP安装可以处理的最大数量。
然后使用decbin()将以二进制形式
为您提供此数字的字符串表示形式@see http://php.net/manual/en/function.decbin.php
并且strlen将为您提供位数。
这是一个可用的功能
function is32Bits() {
return strlen(decbin(~0)) == 32;
}
答案 3 :(得分:1)
这是可以从控制台使用的示例
对于Windows:
php -r "echo (PHP_INT_SIZE == 4 ? '32 bit' : '64 bit').PHP_EOL;" && php -i | findstr Thread
对于Linux
php -r "echo (PHP_INT_SIZE == 4 ? '32 bit' : '64 bit').PHP_EOL;" && php -i | grep Thread
输出示例:
64 bit
Thread Safety => disabled
答案 4 :(得分:0)
我只是环顾四周,没有找到任何有希望的东西。很有可能你可以使用$_SERVER['SERVER_SOFTWARE']
告诉(查看它在你的系统上打印的内容),但是使这个便携并且始终准确可能是不可行的。
答案 5 :(得分:-1)
试试这个简单的PHP函数
<?php
function maxBit()
{
list($return, $number) = array(0, 0);
// Start process
while (true) {
// Get number at x bits
$numX = intval(bcsub(bcpow('2', "{$return}"), '1'));
// Check number
if ($numX != 0 && $number == $numX) {
break;
}
// Update number
$number = $numX;
// Update return value
$return++;
}
return $return;
}
// Check is 64bit
if (maxBit() == 64) {
// Write your code here...
}