Проверка, работает ли ваш код на 64-битном PHP
Кто-нибудь знает способ проверки внутри PHP, если script работает как 32-разрядная, так и 64-разрядная? В настоящее время я использую PHP 5.3.5.
В идеале я хотел бы написать функцию, чтобы мой код выглядел так:
if( is_32bit() === true ) {
do_32bit_workaround();
}
do_everything_else();
У кого-нибудь есть мысли?
Ответы
Ответ 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
Вот легкое руководство для всех
- Перейдите в папку PHP.
Eg C:\xampp5.4\php
- Создать временный файл PHP
function is_32bit(){
return PHP_INT_SIZE === 4;
}
if( is_32bit() === true ) {
echo "32 bits.";
}else{
echo "64 bits.";
}
- Shift + левый клик, нажмите CMD и запустите файл, используя
php.exe filename.php