2009-08-25 2 views
4

На основании this похоже, что получить версию версии ОС очень сложно. Тем не менее, я ищу что-то полупорядочное, которое предупреждает пользователей OS X Tiger и ниже о возможных проблемах совместимости с моим продуктом.Обнаружить OS X версии 10.4 и ниже на сервере

Эвристика, о которой я могу думать, сначала обнаруживает, является ли ОС Mac (относительно простой), а затем сопоставляет пользовательский агент с регулярным выражением 10[/._][0-4] для обнаружения Тигра и ниже. На самом деле меня не волнуют случаи, когда пользовательский агент модифицирован - я хочу, чтобы показатель справедливой скорости обнаруживал версии OS X, а не 100% -ное решение.

Любые другие предложения/рекомендации?

Кроме того, бонусные баллы за указание на инструмент, который помогает мне проверить это путем создания известных строк пользовательского агента для разных версий версии ОС + версии браузера.

Спасибо!

+0

Кажется, я понял часть вашего вопроса, так как я не являюсь пользователем Mac не возражаете ли вы опубликовать некоторые примеры пользовательских строк операторов (например, Safari и Firefox на Mac). –

+0

Safari: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.18 (KHTML, например Gecko) Версия/4.0.1 Safari/530.18 FF: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv: 1.9.1.2) Gecko/20090729 Firefox/3.5.2 – psychotik

+0

Только что отредактировал мой ответ. –

ответ

1

Хамм, я считаю, что с помощью функции get_browser() с до настоящего времени php_browscap.ini является мудрым выбором в этом случай, а не на 100% уверен, что он скажет вам версию ОС.

EDIT: Файл browscap.ini также предоставляет вам достаточное количество строк пользовательского агента, если вы все же решите выполнить всю работу синтаксического анализа самостоятельно.

EDIT: Похоже, что there is also a PHP implementation, который не требует изменения файла php.ini.

EDIT: на основе строки агента пользователя вы предоставили мне вот код, который я считаю, лучше всего работает:

if (preg_match('~Mac OS X (.*?);~', $_SERVER['HTTP_USER_AGENT'], $matches) > 0) 
{ 
    $version = preg_replace('~[^0-9]+~', '.', trim($matches[1])); 

    if (version_compare($version, '10.5', '>=') === true) 
    { 
     // ok 
    } 

    else 
    { 
     // not ok 
    } 
} 

else 
{ 
    // not Mac OS X 
} 
+0

Это будет хорошо работать для версии клиента Windows - не так много для версий Mac OS, если я не сделаю что-то похожее на то, что я написал выше в любом случае. Спасибо, хотя - я не знал об этой очень изящной функции PHP. – psychotik

+0

Действительно, я думаю, что если вы используете функцию version_compare() вместе с индексом версии, возвращаемым get_browser(), вы вряд ли ошибетесь по сравнению с использованием только регулярного подхода. –

0

Любые другие предложения или рекомендации?

Да, не делайте этого. Не то, что вы хотите услышать, но вы правы, в лучшем случае это ненадежно.

Будучи неотъемлемо ленивым, я бы выбрал решение, в котором участвовало наименьшее количество работы. Это большая красная текстовая область рядом с ссылкой для загрузки, в которой указано что-то вроде:

Остерегайтесь. Этот продукт поддерживается только с OS X 10.5 или новее. Пожалуйста, не пытайтесь использовать с более ранними версиями.

Тогда позвольте пользователю решить.

Если вы хотите защитить их дальше, сделайте свою исполняемую программу проверкой самостоятельно, как только она будет запущена на своей коробке. Я понимаю, что на OS X есть uname, или аналогичный инструмент, который может надежно получить версию ОС. Если он не соответствует спецификациям в этот момент, вы можете просто выйти с аналогичным сообщением:

Я предупреждал вас. Но нет, вы не послушаете. Мне все равно нужно было скачать и скачать. Ну, теперь я не собираюсь запускаться вообще, и ты потратил всю эту драгоценную полосу. Глупый, глупый человек, теперь уходит.

Конечно, ваше сообщение об ошибке может быть более тактичным, чем моя :-)

+0

К сожалению, мое приложение даже не загрузит pre-Leopard, поэтому показ ошибки при первом запуске предполагает гораздо более болезненный путь загрузки моего приложения в 10.4 совместимую пусковую установку. Blech! И я доверяю flaky обнаружению над интеллектом пользователя. Многие люди, работающие с ОС X, понятия не имеют, какую версию они используют. Жирный красный текст, предупреждающий их не использовать это с версиями старше, чем «Foo», будет только запугать их, я считаю. – psychotik

Смежные вопросы