我嘗試使用<?php echo php_uname("m"); ?>
,它返回i586但我在Windows 7 64位,我可以在我的計算機屬性中看到。所以我期待輸出x86_64。是否有人知道如何確定PHP中的操作系統架構?如何確定我的操作系統是32位還是64位?
我也想爲Mac OS X做同樣的事情。任何幫助,將不勝感激。
我嘗試使用<?php echo php_uname("m"); ?>
,它返回i586但我在Windows 7 64位,我可以在我的計算機屬性中看到。所以我期待輸出x86_64。是否有人知道如何確定PHP中的操作系統架構?如何確定我的操作系統是32位還是64位?
我也想爲Mac OS X做同樣的事情。任何幫助,將不勝感激。
我最好的猜測是,即使您的操作系統是64位,您的Web服務器是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
就像我在上面的評論中所說的那樣,在32位intel中拋出一個錯誤。 :( '錯誤: 代碼= 0x80041017 描述=無效的查詢 設施= WMI'。我嘗試在命令提示符下運行此命令我無法在'wmic os'命令中找到OSArchitecture – 2012-02-10 14:30:44
@Jigar:我添加了另一種方法,你可以在32位機器上試一試嗎? – 2012-02-10 14:34:21
我想我將不得不使用這個相同的代碼,在其他情況下會出現錯誤,這是32位的,但是我應該冒這個風險嗎? – 2012-02-10 14:36:35
這裏是一個PHP的解決方案:)
echo strlen(decbin(~0));
更簡單
echo 8 * PHP_INT_SIZE;
php_uname
檢查PHP的運行模式不是操作系統。
因此,如果您的操作系統是64位,但php_uname
是返回i586,這是因爲您正在運行的PHP的32位版本。
瞭解PHP的體系結構可以說比知道OS的體系結構更重要。例如,如果您依賴64位操作系統來編寫代碼,您可能會發現自己編寫的代碼在64位操作系統上失敗時,PHP以32位模式執行(就像您現在這樣)。這實際上就是您所處的確切情況,您期待得到64位結果,但得到32位的結果,這是因爲PHP的操作模式。
針對您的問題的真正解決方案是在您的64位操作系統上下載並安裝64位版本的PHP,以便查看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位模式執行被發現。
部分重複http://stackoverflow.com/questions/6303241/find-windows-32-or-64-bit-using-php – Crontab 2012-02-10 13:45:37
剛剛在我的OsX上測試過,它工作正常......哪個版本是你在用嗎? 'php> print php_uname(「m」); x86_64' – 2012-02-10 13:46:41
重複http://stackoverflow.com/questions/2353473/can-php-tell-if-the-server-os-it-64-bit – Leigh 2012-02-10 13:56:30