Как я могу определить, является ли моя ОС 32- или 64-битной? - PullRequest
4 голосов
/ 10 февраля 2012

Я пытался использовать <?php echo php_uname("m"); ?>, он возвращает i586 , но я нахожусь на 64-битной Windows 7, которую я мог видеть в Свойствах моих компьютеров. Так что я ожидаю x86_64 на выходе. Кто-нибудь знает, как определить архитектуру ОС в PHP?

Я тоже хочу то же самое для Mac OS X. Любая помощь будет оценена.

Ответы [ 4 ]

9 голосов
/ 18 ноября 2012

Вот решение php:)

echo strlen(decbin(~0));
6 голосов
/ 22 мая 2014

проще

echo 8 * PHP_INT_SIZE;
1 голос
/ 10 февраля 2012

Мое лучшее предположение состоит в том, что, хотя ваша ОС является 64-битной, ваш веб-сервер работает на x86 и работает в WOW64-режиме (32-битной). Если это так, это должно быть трудно понять на чистом PHP.

Мое предложение (спасибо Ли за ссылку на похожий вопрос) - использовать WMI:

$out = array();
exec("wmic cpu get DataWidth", $out);
$bits = strstr(implode("", $out), "64") ? 64 : 32;
echo $bits; // 32 or 64
0 голосов
/ 30 марта 2016

php_uname проверяет режим работы PHP , а не ОС .

Так что, если ваша ОС 64-битная, но php_uname возвращает i586, потому что вы используете 32-битную версию PHP .

Знание архитектуры PHP, возможно, важнее, чем знание архитектуры ОС. Например, если вы используете 64-битную ОС для принятия решений в коде, вы можете найти код, который не работает на 64-битной ОС, когда PHP выполняется в 32-битном режиме (как сейчас). Это именно та ситуация, в которой вы находитесь, вы ожидали получить 64-битный результат, но получили 32-битный результат из-за режима работы PHP.

Реальным решением вашей проблемы является загрузка и установка 64-битной версии PHP на 64-битной ОС для просмотра 64-битных результатов.


Вот простая 1 строка кода, чтобы определить, выполняется ли PHP в 64-битной или 32-битной версии:

empty(strstr(php_uname("m"), '64')) ?  $php64bit = false : $php64bit = true;

После выполнения строки выше $php64bit будет либо true, либо false.

Вот многострочная версия того же кода:

// detect which version of PHP is executing the script (32 bit or 64 bit)
if(empty(strstr(php_uname("m"), '64'))){
  $php64bit = false;
}else{
  $php64bit = true;
}

Это работает путем проверки php_uname на наличие 64, которое будет найдено, если PHP выполняется в 64-битном режиме.

...