检查您的代码是否在64位PHP上运行

时间:2011-03-24 18:37:36

标签: php

如果脚本以32位或64位运行,有没有人知道在PHP中检查的方法?目前我正在使用PHP 5.3.5。

理想情况下,我想写一个函数,所以我的代码看起来像这样:

if( is_32bit() === true ) {
    do_32bit_workaround();
}
do_everything_else();

有人有任何想法吗?

6 个答案:

答案 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...
}