Skrypt do wykrywania przeglądarki użytkownika w PHP
Ostatnio dla jednego ciekawego projektu potrzebowałem zrobić detekcję przeglądarki i jej wersję w PHP. Szablon był responsywny (responsywny), i konieczne było dostosowanie wyjścia elementów strony dla różnych przeglądarek. Napisałem stronę na moim ulubionym silniku WordPress i motyw został do niej zaprojektowany. Jak zawsze, nie zastanawiając się dwa razy nad zadaniem, wszedłem do Internetu. Zdziwiłem się, gdy znalazłem gotowy scenariusz, co całkowicie mnie usatysfakcjonowało w pierwszej dziesiątce emisji google. Szacunek i szacunek dla programisty i bloggera
który napisał ten scenariusz i umieścił go na swoim blogu.
Co mi się w nim szczególnie podobało, więc to jest temat, że skrypt może wykrywać przeglądarki w silniku Gecko, nie tylko główne przeglądarki (Firefoxa, Chrom, TJ, Opera, Safari), a nawet te, które są zbudowane na rdzeniu Trident (Maxthon, Przeglądarka AVANT, MójIE2), a nawet starsze wersje Opery, udając IE. Oprócz, skrypt wyszukuje i wyświetla wersję przeglądarki.
Autor bloga zamieścił kilka informacji, które również chciałbym umieścić na swojej stronie.
Teoria ze słów autora:
Jak wykrywana jest przeglądarka w PHP?
PHP ma wspaniałą zmienną o nazwie $_SERVER[„HTTP_USER_AGENT”].
Ja mam, Na przykład, ona wygląda tak:
Mozilla/5.0 (Okna; u; Windows NT 5.1; ru; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Stąd wyciągnięcie przeglądarki i wersji jest proste, Czyż nie?
Teraz IE 6
Mozilla/4.0 (zgodny; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Tutaj jest to trochę bardziej skomplikowane., ale też nie powinno sprawiać większych problemów..
Opera 10.61
Opera/9.80 (Windows NT 5.1; u; ru) Wersja Presto/2.6.30/10.61
Opera przygotowała dla nas sztuczkę: nazwa przeglądarki na początku, wersja, jakie to dziwne, na końcu.
Safari 5.1
Mozilla/5.0 (Okna; u; Windows NT 6.1; ru-RU) AppleWebKit/533.17.8 (KHTML, jak Gecko) Wersja/5.0.1 Safari/533.17.8
Safari też zaskakuje: ukośnik nie jest numerem wersji. Numer wersji pojawia się nieco wcześniej.
Chrom 6.0.427.0
Mozilla/5.0 (Okna; u; Windows NT 5.1; w nas) AppleWebKit/534.1 (KHTML, jak Gecko) Chrome/6.0.427.0 Safari/534.1
Chrome jest łatwiejszy do wyciągnięcia, fajnie by było jeszcze nie mylić go z Safari...
(O, dlaczego wszystkie przeglądarki (oprócz Opery) nazywają siebie Mozillą, można czytać w prosty i zabawny sposób tutaj.)
Praktyka ze słów autora
już wiesz, jaka odmiana w linii Agent użytkownika oferują tylko pięć przeglądarek.
Ale w 9 z 10 przypadkach uratuje nas następujące wyrażenie regularne:
1 |
preg_match("/(MSIE|Opera|Firefox|Chrome|Version)(?:\/| )([0-9.]+)/", $agent, $browser_info); |
Następnie nazwa przeglądarki będzie w drugim elemencie tablicy., aw trzecim - jego wersja.
Jedynym wyjątkiem jest Safari zaczynając od wersji 3.0 i Opera zaczynając od wersji 10.00.
Dla tych przeglądarek piszemy:
1 2 |
if ($browser == 'Opera' && $version == '9.80') return 'Opera '.substr($agent,-5); // возвращаем версию Оперы в конце строки if ($browser == 'Version') return 'Safari '.$version; // обозначаем браузер как Сафари |
I jeszcze jedna linia kodu:
1 |
if (!$browser && strpos($agent, 'Gecko')) return 'Browser based on Gecko'; |
Jeśli nie mogliśmy wykryć przeglądarki, ale wiemy, że używa jądra Gecko, następnie wyświetl komunikat mówiący, że przeglądarka działa na tym jądrze.
Tutaj, w rzeczywistości, i cała zawartość pierwszego, bardziej kompaktowa funkcja z definicji przeglądarki.
Jej cały kod:
1 2 3 4 5 6 7 8 |
function user_min_browser($agent) { preg_match("/(MSIE|Opera|Firefox|Chrome|Version)(?:\/| )([0-9.]+)/", $agent, $browser_info); list(,$browser,$version) = $browser_info; if ($browser == 'Opera' && $version == '9.80') return 'Opera '.substr($agent,-5); if ($browser == 'Version') return 'Safari '.$version; if (!$browser && strpos($agent, 'Gecko')) return 'Browser based on Gecko'; return $browser.' '.$version; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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; // для всех остальных возвращаем браузер и версию } |
Przykłady pracy
W tabeli przedstawiono wynik pracy dwóch funkcji - w pierwszej kolumnie przeglądarki, w którym wywołano funkcje, w drugim - odpowiedź funkcji, biorąc pod uwagę mało znane przeglądarki, w trzecim - wynik funkcji zredukowanej.
Przeglądarka | Wynik pełnej funkcji | Wynik funkcji skróconej |
Firefoxa 1.5.0.12 | Firefoxa 1.5.0.12 | Firefoxa 1.5.0.12 |
Firefoxa 3.0.10 | Firefoxa 3.0.10 | Firefoxa 3.0.10 |
Firefoxa 3.6.9 | Firefoxa 3.6.9 | Firefoxa 3.6.9 |
Firefoxa 4.0 | Firefoxa 4.0 | Firefoxa 4.0 |
TJ 4.01 | TJ 4.01 | MSIE 4.01 |
TJ 5.5 | TJ 5.5 | MSIE 5.5 |
TJ 6.0 | TJ 6.0 | MSIE 6.0 |
TJ 7.0 | TJ 7.0 | MSIE 7.0 |
TJ 8.0 | TJ 8.0 | MSIE 8.0 |
Chrom 5.0.375.127 | Chrom 5.0.375.127 | Chrom 5.0.375.127 |
Chrom 6.0.472.36 | Chrom 6.0.472.36 | Chrom 6.0.472.36 |
Chrom 7.0.517.8 | Chrom 7.0.517.8 | Chrom 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 |
Trzoda 1.2.6 | Trzoda 1.2.6 | Firefoxa 2.0.0.17 |
Olśnienie 2.22 | Olśnienie 2.22 | Firefoxa 2.0.0.20 |
Nawigator 9.0.0.6 | Nawigator 9.0.0.6 | Firefoxa 2.0.0.12 |
Netscape 8.1.3 | Netscape 8.1.3 | Przeglądarka oparta na Gecko |
Zdobywca 4.4 | Zdobywca 4.4 | Przeglądarka oparta na Gecko |
Galeon 2.0.4 | Przeglądarka oparta na Gecko | Przeglądarka oparta na Gecko |
lody 1.1.13 | Przeglądarka oparta na Gecko | Przeglądarka oparta na Gecko |
Lodowa łasica 3.0.4 | Lodowa łasica 3.0.4 | Przeglądarka oparta na Gecko |
Małpa morska 1.1.14 | Małpa morska 1.1.14 | Przeglądarka oparta na Gecko |
Pole minowe 3.7 | Pole minowe 3.7 | Przeglądarka oparta na Gecko |
Przeglądarka AVANT 7.0 | Przeglądarka Avant oparta na IE 7.0 | MSIE 7.0 |
Camino 2.0.4 | Camino 2.0.4 | Firefoxa 3.0.19 |
Przeglądarki zaznaczone na czerwono, której funkcja nie mogła określić.
I tutaj możesz sprawdzić funkcjonalność funkcji w swojej przeglądarce.
Mam nadzieję, że te funkcje będą komuś przydatne.
Powodzenia.
Możesz pobrać ode mnie skrypt wykrywający przeglądarkę:
Skrypt wykrywający przeglądarkę
lub na stronie autora:
Protokół https://www.recens.ru/php/detect_user_browser.html
Jeszcze raz szczególne podziękowania dla autora!
Definiowanie przeglądarek mobilnych
Dowiedziałem się również z komentarzy na stronie autora, jak identyfikować urządzenia mobilne:
1 2 3 4 5 6 7 8 9 10 11 |
function device() { $user_agent = $this->agent(); // взять 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', 'Macintosh', 'QNX', 'BeOS', 'OS/2'); foreach($oses as $os) { if (substr_count($user_agent, $os) > 0) return 'PC'; } return 'Mobile'; } |
zwroty mobilny lub komputer, powodzenia )
/*
- Podstawowy kurs projektowania stron internetowych;
- Układ stron;
- Ogólny kurs CMS WordPress oraz kontynuacja kursu dotyczącego tworzenia szablonów;
- Tworzenie stron internetowych w PHP.