Почему мой оператор PHP IF / ELSE не работает для определения операционной системы пользователей? - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь создать страницу, которая будет перенаправлять пользователей в зависимости от их операционной системы.Для начала мне нужно, чтобы он работал, перенаправляя пользователей 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";
?>

Я не уверен, что делаю это наилучшим образом, нолюбая помощь, брошенная в меня, была бы очень признательна.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Цитируя мой комментарий выше:

Использование User-Agent может иметь законное применение, даже если это плохая идея. Например, отображение скриншотов из правильной операционной системы на некоторой странице справки / руководства. Или сначала разместите ссылку для загрузки наиболее подходящей версии программного обеспечения. Просто убедитесь, что это только для глаз, и есть разумный вариант по умолчанию.

Например, страница, специфичная для WinXP, должна также содержать ссылку на загрузку 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 должен указывать на правильное расположение файла browscap.ini на ваша система.

browscap.ini не поставляется с PHP, но вы можете найти самую последнюю версию » php_browscap.ini файл здесь.

Хотя browscap.ini содержит информацию о многих браузерах, он опирается на обновления пользователя для поддержания базы данных в актуальном состоянии. Формат файла довольно понятно.

0 голосов
/ 20 декабря 2011

Пара вещей, вы используете strstr(), когда подойдет простой strpos.Я бы также добавил это в простой оператор switch, чтобы вы могли легко установить по умолчанию / сопоставить несколько условий.

Во-вторых, правильный способ перенаправления в PHP - использовать команду 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 и, надеюсь, вы поймете схему.Как уже говорили другие, полагаться на useragent не идеально, но для вашего простого случая загрузки это должно быть хорошо.

0 голосов
/ 20 декабря 2011

Вы можете просмотреть этот массив пользовательских агентов и соответствующих операционных систем, а затем перенаправить пользователей в соответствии с результатом.

    $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)'
    );
...