2010-11-05 32 views
8

我想弄清楚訪問者的操作系統是使用PHP的Windows,Mac或Linux(我不需要版本,發行版信息等)。有幾種方法,但它們對於這個簡單的要求看起來有些複雜。最簡單的方式操作系統檢測與PHP?

有沒有簡單的方法可以提供這種信息,但仍然相當可靠?

在此先感謝。

+1

http://stackoverflow.com/questions/228256/operating-system-from-user-agent-http-header – user187291 2010-11-05 09:31:29

+0

[使用PHP獲取操作系統信息]的可能的重複(http://stackoverflow.com/questions/18070154/get-operating-system-info-with-php) – 2014-11-27 10:30:13

回答

6

一個簡單的解決方案看看here。 用戶代理頭可能會顯示一些操作系統信息,但我不會指望這一點。

爲了您的使用情況,我會在客戶端使用javascript進行ajax調用,以通知您的服務器客戶端的操作系統。並做到防水。

這裏是一個例子。

的Javascript(客戶端,瀏覽器檢測+ AJAX調用):

window.addEvent('domready', function() { 
    if (BrowserDetect) { 
    var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS; 
    var query = 'record_browser.php' 
    var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post(); 
    } 
}); 

PHP(服務器端):

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $session = session_id(); 
    $user_id = isset($user_id) ? $user_id : 0; 
    $browser = isset($_POST['browser']) ? $_POST['browser'] : ''; 
    $version = isset($_POST['version']) ? $_POST['version'] : ''; 
    $os = isset($_POST['os']) ? $_POST['os'] : ''; 

    // now do here whatever you like with this information 
} 
+0

似乎可靠。但是,我認爲檢測只發生在頁面加載後? – user435216 2010-11-05 09:38:10

+0

如果沒有頁面加載,您將無法檢索到比用戶代理標頭顯示的內容更多的內容。那麼,初始化會話時(首次加載頁面時)可以保存用戶操作系統,一種解決方法可能是在檢測到第一頁上的操作系統後重定向到第二頁。 – Thariama 2010-11-05 09:43:49

+0

鏈接被破壞 – 2016-01-19 15:21:02

22
<?php 

$agent = $_SERVER['HTTP_USER_AGENT']; 

if(preg_match('/Linux/',$agent)) $os = 'Linux'; 
elseif(preg_match('/Win/',$agent)) $os = 'Windows'; 
elseif(preg_match('/Mac/',$agent)) $os = 'Mac'; 
else $os = 'UnKnown'; 


echo $os; 

?> 
+0

對我很好! – 2013-05-02 15:29:29