我在Mac上运行Apache / php服务器,我想根据访问它的操作系统显示不同的信息。
我怎么能用PHP做到这一点?
答案 0 :(得分:4)
用户代理标头可能会显示一些操作系统信息,但我不会指望它。
对于您的用例,我将使用客户端的javascript进行ajax调用,以通知您的服务器客户端的操作系统。
这是一个例子。
Javascript(客户端,浏览器检测+ ajax调用): (注意:您需要detection script from here)
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
}
答案 1 :(得分:2)
您可以查看用户代理标头($_SERVER['HTTP_USER_AGENT']
)。例如,iPhone用户代理如下所示:
Mozilla / 5.0(iPhone; U; CPU iPhone OS 3_0 与Mac OS X一样; EN-US) AppleWebKit / 420.1(KHTML,像Gecko一样) 版本/ 3.0 Mobile / 1A542a Safari / 419.3
Windows XP可能如下所示:
Mozilla / 5.0(Windows; U; Windows NT 5.1 强>; EN-US; rv:1.9.2.10)Gecko / 20100914 Firefox / 3.6.10
等等。查看简单脚本here。您也可以使用get_browser()
(您需要browscap)
请注意,此标头很容易伪造,因此不应用于任何关键任务。
答案 2 :(得分:1)
可靠?你不能。
不可靠? $_SERVER['HTTP_USER_AGENT']
通常包含操作系统信息。
答案 3 :(得分:1)
function getBrowser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
var_dump(getBrowser());
答案 4 :(得分:0)
get_browser函数将为您解析$ _SERVER ['HTTP_USER_AGENT']。你需要browsecap.ini。
答案 5 :(得分:0)
我不会自己实现这一点,而是尝试使用现有的Browser.php软件来解析用户代理字符串。你需要考虑很多小事情,最好使用一个专门的库,而不是试着自己学习所有这些小平台/浏览器的不协调。