Подтвердить что ты не робот

Проверка, работает ли ваш код на 64-битном PHP

Кто-нибудь знает способ проверки внутри PHP, если script работает как 32-разрядная, так и 64-разрядная? В настоящее время я использую PHP 5.3.5.

В идеале я хотел бы написать функцию, чтобы мой код выглядел так:

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

У кого-нибудь есть мысли?

4b9b3361

Ответ 1

Проверьте константу PHP_INT_SIZE. Он будет меняться в зависимости от размера регистра (т.е. 32-битного и 64-битного).

В 32-разрядных системах PHP_INT_SIZE должно быть 4, для 64-разрядных должно быть 8.

Подробнее см. http://www.php.net/manual/en/language.types.integer.php.

Ответ 2

Вы можете написать такую ​​функцию:

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

Затем вы можете использовать образец кода, который вы опубликовали:

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

Ответ 3

Короткий способ получить количество бит.

    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;
}

Ответ 4

Я просто оглянулся и не нашел ничего слишком многообещающего. Там есть хороший шанс, что вы можете использовать $_SERVER['SERVER_SOFTWARE'], чтобы рассказать (проверьте, что он печатает в вашей системе), но сделать эту переносную и всегда точной, вероятно, не выполнимой.

Ответ 5

Попробуйте эту простую функцию 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...
}

Ответ 6

Вот легкое руководство для всех

  1. Перейдите в папку PHP. Eg C:\xampp5.4\php
  2. Создать временный файл PHP

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

if( is_32bit() === true ) {
    echo "32 bits.";
}else{
    echo "64 bits.";
}
  1. Shift + левый клик, нажмите CMD и запустите файл, используя php.exe filename.php