Скрипт для визначення браузера користувача на PHP
Нещодавно для одного цікавого проекту мені потрібно було зробити визначення браузера та його версії на PHP. Шаблон був адаптивний (чуйний), і треба було підлаштувати під різні браузери виведення елементів сторінки. Сайт я писав на улюбленому движку WordPress і тема була зверстана під нього. Як завжди недовго думаючи над завданням поліз я в Інтернет. Моє було здивування коли я знайшов готовий сценарій, який повністю мене влаштував у першій десятці видачі google. Респект та уважуха розробнику та блогеру до
торий цей скрипт написав і виклав у себе на блозі.
Чим він особливо мені сподобався, так це тим, що скрипт міг визначати браузери на движку Gecko, а не лише основні браузери (Firefox, Chrome, IE, Opera, Safari), і навіть ті, які побудовані на ядрі Trident (Maxthon, Avant Browser, MyIE2), і навіть старі версії Опери, маскуються під IE. Крім того, скрипт знаходить та відображає версію браузера.
Автор блогу виклав деякі відомості, які я також хотів би викласти собі на сайт.
Теорія зі слів автора:
Як визначається браузер на PHP?
У PHP є чудова змінна під назвою $_SERVER["HTTP_USER_AGENT"].
У мене, наприклад, вона виглядає так:
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Звідси витягти браузер та версію просто, чи не так?
Тепер IE 6
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Тут уже трохи складніше, але теж не повинно викликати особливих труднощів.
Opera 10.61
Опера/9,80 (Windows NT 5.1; U; ru) Presto/2.6.30 Версія/10.61
Опера приготувала нам підлянку: назва браузера на початку, версія, як це не дивно, в кінці.
Safari 5.1
Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) AppleWebKit/533.17.8 (KHTML, like Gecko) Версія/5.0.1 Safari/533.17.8
Safari теж дивує: через слеш йде зовсім не номер версії. Номер версії йде трохи раніше.
Chrome 6.0.427.0
Mozilla/5.0 (Windows; U; Windows NT 5.1; в США) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.427.0 Safari/534.1
Хром витягти легше, добре б ще не переплутати його з Safari.
(Про те, чому всі браузери (крім Опери) називають себе Mozilla можна у простій та захоплюючій формі почитати тут.)
Практика зі слів автора
Ви вже впізнали, яка різноманітність у рядку User-agent пропонують лише п'ять браузерів.
Але в 9 з 10 випадків нас врятує такий регулярний вираз:
preg_match("/(MSIE|Opera|Firefox|Chrome|Version)(?:\/| )([0-9.]+)/", $агент, $browser_info);Після цього у другому елементі масиву лежатиме назва браузера, а в третьому – його версія.
Виняток є лише Safari починаючи з версії 3.0 і Opera починаючи з версії 10.00.
Для цих браузерів ми пишемо:
if ($браузер == 'Опера' && $версія == '9.80') повернення 'Opera '.substr($агент,-5); // возвращаем версию Оперы в конце строки
if ($браузер == 'Версія') повернення 'Сафарі '.$version; // позначте браузер як SafariІ ще один рядок коду:
if (!$Браузер && Стрпос($агент, 'Гекон')) повернення 'Браузер на основі Gecko';
Якщо ми не змогли визначити браузер, але ми знаємо, що він використовує ядро Gecko, то виводимо повідомлення про те, що браузер працює на цьому ядрі.
Ось, в сутності, і весь зміст першої, більш компактної функції визначення браузера.
Її код повністю:
функція user_min_browser($агент) {
preg_match("/(MSIE|Opera|Firefox|Chrome|Version)(?:\/| )([0-9.]+)/", $агент, $browser_info);
список(,$Браузер,$версія) = $browser_інформація;
if ($браузер == 'Опера' && $версія == '9.80') повернення 'Opera '.substr($агент,-5);
if ($браузер == 'Версія') повернення 'Сафарі '.$version;
if (!$Браузер && Стрпос($агент, 'Гекон')) повернення 'Браузер на основі Gecko';
повернути $browser". '.$version;
}Ось більш повна версія, що дозволяє визначати екзотичні, застарілі, а також ті браузери, які побудовані на основі Firefox і IE:
функція user_browser($агент) {
preg_match("/(MSIE|Opera|Firefox|Chrome|Version|Опера Міні|Netscape|Konqueror|SeaMonkey|Camino|Minefield|Iceweasel|К-Мелеон|Maxthon)(?:\/| )([0-9.]+)/", $агент, $browser_info); // регулярний вираз, що дозволяє поширювати 90% браузеров
list(,$Браузер,$версія) = $browser_інформація; // получаем данные из массива в переменную
if (preg_match("/Opera ([0-9.]+)/i", $агент, $опера)) повернення 'Опера '.$opera[1]; // визначення _very_old_ версій Опери (до 8.50), при желании можно убрать
if ($browser == 'MSIE') { // если браузер определён как IE
preg_match("/(Maxthon|Avant Browser|MyIE2)/i", $агент, $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.]+)/", $агент, $фф); // проверяем, не разработка ли это на основе Firefox
if ($фф) return $ff[1].' '.$ff[2]; // если да, то выводим номер и версию
}
if ($браузер == 'Опера' && $версія == '9.80') повернення 'Opera '.substr($агент,-5); // если браузер определён как Opera 9.80, берём версию Оперы из конца строки
if ($браузер == 'Версія') повернення 'Сафарі '.$version; // определяем Сафари
if (!$Браузер && Стрпос($агент, 'Гекон')) повернення 'Браузер на основі Gecko'; // для неопознанных браузеров проверяем, если они на движке Gecko, и возращаем сообщение об этом
return $browser.' '.$version; // для всех остальных возвращаем браузер и версию
}Приклади роботи
У таблиці наведено результат роботи двох функцій – у першому стовпці браузер, у якому викликалися функції, у другому – відповідь функції, враховує маловідомі браузери, у третій – результат роботи скороченої функції.
| Браузер | Результат повної функції | Результат скороченої функції |
| Firefox 1.5.0.12 | Firefox 1.5.0.12 | Firefox 1.5.0.12 |
| Firefox 3.0.10 | Firefox 3.0.10 | Firefox 3.0.10 |
| Firefox 3.6.9 | Firefox 3.6.9 | Firefox 3.6.9 |
| Firefox 4.0 | Firefox 4.0 | Firefox 4.0 |
| IE 4.01 | IE 4.01 | MSIE 4.01 |
| IE 5.5 | IE 5.5 | MSIE 5.5 |
| IE 6.0 | IE 6.0 | MSIE 6.0 |
| IE 7.0 | IE 7.0 | MSIE 7.0 |
| IE 8.0 | IE 8.0 | MSIE 8.0 |
| Chrome 5.0.375.127 | Chrome 5.0.375.127 | Chrome 5.0.375.127 |
| Chromium 6.0.472.36 | Chrome 6.0.472.36 | Chrome 6.0.472.36 |
| Chrome 7.0.517.8 | Chrome 7.0.517.8 | Chrome 7.0.517.8 |
| Opera 7.03 | Opera 7.03 | MSIE 6.0 |
| Opera 8.0 | Opera 8.0 | MSIE 6.0 |
| Opera 8.54 | Opera 8.54 | Opera 8.54 |
| Opera 9.50 | Opera 9.50 | Opera 9.50 |
| Opera 10.00 | Opera 10.00 | Opera 10.00 |
| Opera 10.10 | Opera 10.10 | Opera 10.10 |
| Opera 10.61 | Opera 10.61 | Opera 10.61 |
| Safari 3.0 | Safari 3.0 | Safari 3.0 |
| Safari 4.0 | Safari 4.0 | Safari 4.0 |
| Safari 5.0.1 | Safari 5.0.1 | Safari 5.0.1 |
| Flock 1.2.6 | Flock 1.2.6 | Firefox 2.0.0.17 |
| Epiphany 2.22 | Epiphany 2.22 | Firefox 2.0.0.20 |
| Navigator 9.0.0.6 | Navigator 9.0.0.6 | Firefox 2.0.0.12 |
| Netscape 8.1.3 | Netscape 8.1.3 | Browser based on Gecko |
| Konqueror 4.4 | Konqueror 4.4 | Browser based on Gecko |
| Galeon 2.0.4 | Browser based on Gecko | Browser based on Gecko |
| Iceape 1.1.13 | Browser based on Gecko | Browser based on Gecko |
| Iceweasel 3.0.4 | Iceweasel 3.0.4 | Browser based on Gecko |
| SeaMonkey 1.1.14 | SeaMonkey 1.1.14 | Browser based on Gecko |
| Minefield 3.7 | Minefield 3.7 | Browser based on Gecko |
| Avant Browser 7.0 | Avant Browser based on IE 7.0 | MSIE 7.0 |
| Camino 2.0.4 | Camino 2.0.4 | Firefox 3.0.19 |
Червоним кольором відмічені браузери, які функція не змогла визначити.
А тут ви можете перевірити роботу функцій у своєму браузері.
Сподіваюся, що ці функції будуть комусь корисні.
хай щастить.
Завантажити скрипт для визначення браузера можна у мене:
або на сайті автора:
https://www.recens.ru/php/detect_user_browser.html
Ще раз окреме дякую автору!
Визначаємо мобільні браузери
Ще із коментарів на сайті автора знайшов, як визначити мобільні пристрої:
function device() { $user_agent = $this->агент(); // взять USER_AGENT пользователя $oses = array ('Windows 95','Win95','Windows_95', 'Windows 98', 'Win98', 'Windows NT', 'winNT', 'Windows 2000', 'Windows XP', 'winXP', 'Windows ME', 'winME', 'OpenBSD', 'SunOS', 'Linux', 'Mac_PowerPC', 'Макінтош', 'QNX', 'BeOS', 'OS/2'); foreach($ОС як $os) { if (substr_count($user_agent, $ОС) > 0) повернення 'ПК'; } повернення "Мобільний"; }
Повертає mobile або PC, хай щастить )
/*

- Базовий курс з веб-дизайну;
- Верстка сайтів;
- Загальний курс CMS WordPress та продовження курсу з розробки шаблонів;
- Розробка сайтів на PHP.




