Скрипт для визначення браузера користувача на php
Нещодавно для одного цікавого проекту мені було потрібно зробити визначення браузера і його версії на PHP. Шаблон був адаптивний (responcive), і треба було підлаштувати під різні браузери висновок елементів сторінки. Сайт я писав на улюбленому движку WordPress і тема була зверстана під нього. Як завжди недовго думаючи над завданням поліз я в Інтернет. Моє було здивування коли я знайшов готовий скрипт, який повністю мене влаштував в першій десятці видачі google. Респект і уважуха розробнику і блогеру який цей скрипт написав і виклав у себе на блозі.
Чим він особливо мені сподобався, так це тим, що скрипт міг визначати браузери на движку Gecko, а не тільки основні браузери (Firefox, Chrome, IE, Opera, Safari), і навіть ті, які побудовані на ядрі Trident (Maxthon, Avant Browser , MyIE2), і навіть старі версії Опери, що маскуються під IE. Крім того, скрипт знаходить і відображає версію браузера.
Як визначається браузер на PHP?
У PHP є чудова погода під назвою $ _SERVER [ 'HTTP_USER_AGENT'].
У мене, наприклад, вона виглядає так:
Тепер IE 6
Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Тут вже трохи складніше, але теж не повинно викликати особливих труднощів.
Opera 10.61
Opera / 9.80 (Windows NT 5.1; U; ru) Presto / 2.6.30 Version / 10.61
Опера приготувала нам подлянку: назва браузера на початку, а версія, як це не дивно, в кінці.
Safari 5.1
Mozilla / 5.0 (Windows; U; Windows NT 6.1; ru-RU) AppleWebKit / 533.17.8 (KHTML, like Gecko) Version / 5.0.1 Safari / 533.17.8
Safari теж дивує: через слеш йде зовсім не номер версії. Номер версії йде трохи раніше.
Chrome 6.0.427.0
Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit / 534.1 (KHTML, like Gecko) Chrome / 6.0.427.0 Safari / 534.1
Хром витягнути легше, добре б ще не переплутати його з Safari ...
(Про те, чому все браузери (крім Опери) називають себе Mozilla можна в простій і захоплюючій формі почитати тут.)
Ви вже дізналися, яка різноманітність в рядку User-agent пропонують всього лише п'ять браузерів.
Але в 9 з 10 випадків нас врятує наступне регулярний вираз:
Регулярний вираз визначаємо браузер
function user_browser ($ agent)
preg_match ( "/ (MSIE | Opera | Firefox | Chrome | Version | Opera Mini | Netscape | Konqueror | SeaMonkey | Camino | Minefield | Iceweasel | K-Meleon | Maxthon) (?: \ / |) ([0-9.] +) / ". $ agent. $ browser_info); // регулярний вираз, яке дозволяє отпределіть 90% браузерів
list (. $ browser. $ version) = $ browser_info; // отримуємо дані з масиву в змінну
if (preg_match ( "/ Opera ([0-9.] +) / i". $ agent. $ opera)) return 'Opera'. $ Opera [1]; // визначення _очень_старих_ версій Опери (до 8.50), при бажанні можна прибрати
if ($ browser == 'MSIE') / если браузер определён как IE
preg_match ( "/ (Maxthon | Avant Browser | MyIE2) / i". $ agent. $ ie); // перевіряємо, чи не розробка чи це на основі IE
if ($ ie) return $ ie [1]. 'Based on IE'. $ Version; // якщо так, то повертаємо повідомлення про це
return 'IE'. $ Version; // інакше просто повертаємо IE і номер версії
if ($ browser == 'Firefox') / если браузер определён как Firefox
preg_match ( "/(Flock|Navigator|Epiphany)\/([0-9.]+)/". $ agent. $ ff); // перевіряємо, чи не розробка чи це на основі Firefox
if ($ ff) return $ ff [1]. ''. $ Ff [2]; // якщо так, то виводимо номер і версію
if ($ browser == 'Opera' $ Version == '9.80') return 'Opera'. substr ($ agent. - 5); // якщо браузер визначений як Opera 9.80, беремо версію Опери з кінця рядка
if ($ browser == 'Version') return 'Safari'. $ Version; // визначаємо Сафарі
if (. $ browser strpos ($ agent. 'Gecko')) return 'Browser based on Gecko'; // для невпізнаних браузерів перевіряємо, якщо вони на движку Gecko, і в усьому зростали повідомлення про це
return $ browser. ''. $ Version; // для всіх інших повертаємо браузер і версію
приклади роботи
У таблиці наведено результат роботи двох функцій - в першому стовпці браузер, в якому викликалися функції, в другому - відповідь функції, що враховує маловідомі браузери, в третій - результат роботи скороченою функції.
Результат повної функції