【问题标题】:Checking if your code is running on 64-bit PHP检查您的代码是否在 64 位 PHP 上运行
【发布时间】:2011-07-22 09:13:53
【问题描述】:

有谁知道在 PHP 中检查脚本是以 32 位还是 64 位运行的方法?目前我使用的是 PHP 5.3.5。

理想情况下,我想编写一个函数,以便我的代码如下所示:

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

有人有什么想法吗?

【问题讨论】:

标签: php


【解决方案1】:

检查PHP_INT_SIZE 常量。它会根据寄存器的大小(即 32 位与 64 位)而有所不同。

在 32 位系统中 PHP_INT_SIZE 应该是 4,对于 64 位系统应该是 8

请参阅http://php.net/manual/language.types.integer.php 了解更多详情。

【讨论】:

  • 不是很有用。请参阅stackoverflow.com/questions/6303241/… 以获得更好的答案
  • @matb33 ...这与 switch 语句的答案相同...?
  • 问题在于它没有说明PHP_INT_SIZE 的值对于 32 位和 64 位应该是什么。 matb33 的链接提供了该信息。
  • 快速命令行检查:php -r 'echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";'
【解决方案2】:

你可以这样写一个函数:

function is_32bit(){
  return PHP_INT_SIZE === 4;
}

然后您可以使用您发布的示例代码:

if ( is_32bit() ) {
    do_32bit_workaround();
} else {
    do_everything_else();
}

【讨论】:

  • 少即是多,简短的回答永远是最好的答案。
【解决方案3】:

这是一个可以从控制台使用的示例

对于 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】:

    获取位数的简单方法。

        strlen(decbin(~0));
    

    这是如何工作的:

    按位补码运算符,波浪号 ~ 翻转每一位。

    @见http://php.net/manual/en/language.operators.bitwise.php

    0 上使用它会打开整数的每一位。

    这为您提供了 PHP 安装可以处理的最大数量。

    然后使用 decbin() 将为您提供此数字的二进制形式的字符串表示

    @见http://php.net/manual/en/function.decbin.php

    strlen 会给你位数。

    这是一个可用的函数

    function is32Bits() {
        return strlen(decbin(~0)) == 32;
    }
    

    【讨论】:

    • 了解这种方式也很好,因为它甚至可以在低于 5.1 的 PHP 版本中使用
    【解决方案5】:

    我只是环顾四周,没有发现任何有希望的东西。很有可能您可以使用 $_SERVER['SERVER_SOFTWARE'] 来判断(查看它在您的系统上打印的内容),但要使其便携且始终准确可能是不可行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2015-06-20
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多