我试图创建一个页面,将重定向用户取决于他们的操作系统。首先,我需要它能够将Windows XP用户重定向到位置A,其他Windows用户重定向到位置B, Mac用户重定向到位置c。
我用它来确定Windows/Mac运行良好:
<?php
$useragent = $_SERVER['HTTP_USER_AGENT'];
if (strstr($useragent,'Win')) {
$os='<META HTTP-EQUIV="Refresh"
CONTENT="1; URL=windows.php">';
} else {
$os='<META HTTP-EQUIV="Refresh"
CONTENT="0; URL=mac.php">';
}
print "$os";
?>
工作正常,但后来我试图为Windows NT 5.1 (Windows XP)添加一条语句
<?php
$useragent = $_SERVER['HTTP_USER_AGENT'];
if (strstr($useragent,'Windows NT 5.1')) {
$os='<META HTTP-EQUIV="Refresh"
CONTENT="1; URL=windows-xp.php">';
} else if (strstr($useragent,'Win')) {
$os='<META HTTP-EQUIV="Refresh"
CONTENT="1; URL=windows.php">';
} else {
$os='<META HTTP-EQUIV="Refresh"
CONTENT="0; URL=mac.php">';
}
print "$os";
?>
我不相信我这样做是最好的,但是任何对我的帮助都会让我非常感激。
谢谢!
引用我上面的评论:
依赖User-Agent可能有一些合法的用途,即使这通常是一个坏主意。例如,在某种帮助/手册页面上显示来自正确操作系统的屏幕截图。或者首先为最合适的软件版本定位下载链接。只要确保这只是为了美观,并且有一个相同的默认选项。
例如,特定于Windows的页面也应该包括MacOS下载的链接,即使Windows XP的下载设置在第一/最突出的位置。此外,默认版本还应该提供所有下载链接,并且应该完全可操作。例如,它可以相当于与您的软件的最常用版本相对应的页面。
$browser = get_browser(null, true);
switch ($browser->platform) {
case 'WinXP':
// XP-specific
break;
case 'WinVista':
// Vista-specifict
break;
case 'MacOSX':
// OSX default
break;
default:
// Generic default
}
来自PHP文档:
为了使其工作,您的browscap配置设置Php.ini必须指向浏览器上的browscape .ini文件的正确位置您的系统。
browscape .ini没有与PHP捆绑在一起,但是您可以找到一个最新的»
虽然browscape .ini包含许多浏览器的信息,但它依赖于用户更新以保持数据库的最新状态。文件格式为相当不言自明的。
您可以遍历这个用户代理数组和匹配的操作系统,然后根据结果重定向用户。
$OSList = array(
// Match user agent string with operating systems
'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows Server 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)',
'Windows 7' => '(Windows NT 7.0)',
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'Windows ME' => 'Windows ME',
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
);
有几件事,当您使用strstr()
时,一个简单的strpos
就可以了。我也会把它放在一个简单的switch语句中,这样你就可以很容易地设置一个默认/匹配多个条件。
header()
命令,如下所示:
header("Location: windows.php");
把它们放在一起,你就得到了这个:
$useragent = $_SERVER['HTTP_USER_AGENT'];
switch(true) {
// Windows XP
case stripos($useragent, 'Windows NT 5') !== false:
header("Location: windowsxp.php");
break;
case stripos($useragent, 'Windows ') !== false: // Windows whatever
header("Location: windows.php");
break;
case stripos($useragent, 'mac') !== false:
default :
// Default, maybe do nothing?
}
阅读PHP switch语句,希望你能理解它的布局。正如其他人所说,依赖useragent并不完美,但对于您的简单下载情况,它应该是好的。