2012-02-10 115 views
4

我嘗試使用<?php echo php_uname("m"); ?>,它返回i586但我在Windows 7 64位,我可以在我的計算機屬性中看到。所以我期待輸出x86_64。是否有人知道如何確定PHP中的操作系統架構?如何確定我的操作系統是32位還是64位?

我也想爲Mac OS X做同樣的事情。任何幫助,將不勝感激。

+1

部分重複http://stackoverflow.com/questions/6303241/find-windows-32-or-64-bit-using-php – Crontab 2012-02-10 13:45:37

+1

剛剛在我的OsX上測試過,它工作正常......哪個版本是你在用嗎? 'php> print php_uname(「m」); x86_64' – 2012-02-10 13:46:41

+0

重複http://stackoverflow.com/questions/2353473/can-php-tell-if-the-server-os-it-64-bit – Leigh 2012-02-10 13:56:30

回答

1

我最好的猜測是,即使您的操作系統是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 
+0

就像我在上面的評論中所說的那樣,在32位intel中拋出一個錯誤。 :( '錯誤: 代碼= 0x80041017 描述=無效的查詢 設施= WMI'。我嘗試在命令提示符下運行此命令我無法在'wmic os'命令中找到OSArchitecture – 2012-02-10 14:30:44

+0

@Jigar:我添加了另一種方法,你可以在32位機器上試一試嗎? – 2012-02-10 14:34:21

+0

我想我將不得不使用這個相同的代碼,在其他情況下會出現錯誤,這是32位的,但是我應該冒這個風險嗎? – 2012-02-10 14:36:35

8

這裏是一個PHP的解決方案:)

echo strlen(decbin(~0)); 
0

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線將或者truefalse之後。

這裏是相同的代碼的多行版本:

// 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位模式執行被發現。

相關問題