Определение браузера пользователя через PHP
![Определение браузера пользователя через PHP](/images/articles/php-browser.jpg)
Очень часто я слышу мнение, что через PHP невозможно узнать, какой браузер у пользователя, поскольку это серверный язык, а не клиентский. На самом деле, это далеко не так. Браузер - это клиент, а любой сервер имеет полное право знать информацию о клиенте, который к нему подключается, то есть о браузере. А как определить браузер через PHP, об этом Вы узнаете из этой статьи.
Для определения браузера пользователя в PHP есть массив $_SERVER, у которого есть элемент с ключом HTTP_USER_AGENT:
<?php
echo $_SERVER["HTTP_USER_AGENT"];
?>
Вывод будет примерно таким: "Opera/9.80 (Windows NT 6.1; WOW64; U; ru) Presto/2.10.289 Version/12.02", если это Opera, либо таким: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0", если клиент - это Firefox. И так далее, в любом браузере можно увидеть некое ключевое слово. Благодаря этому ключевому слову, без проблем удаётся однозначно определить браузер:
<?php
$user_agent = $_SERVER["HTTP_USER_AGENT"];
if (strpos($user_agent, "Firefox") !== false) $browser = "Firefox";
elseif (strpos($user_agent, "Opera") !== false) $browser = "Opera";
elseif (strpos($user_agent, "Chrome") !== false) $browser = "Chrome";
elseif (strpos($user_agent, "MSIE") !== false) $browser = "Internet Explorer";
elseif (strpos($user_agent, "Safari") !== false) $browser = "Safari";
else $browser = "Неизвестный";
echo "Ваш браузер: $browser";
?>
Вот так легко определить, какой браузер у пользователя через PHP, а дальше можно, например, подгрузить определённые стили для конкретного браузера, или даже его версии.
-
-
Михаил Русаков
Комментарии (26):
Зачем эта статья если таковая уже есть? http://myrusakov.ru/php-var-server.html А сделать условие(if-else) думаю может каждый, кто хоть немного знает PHP
Ответить
Часто это спрашивают, а всё потому, что та статья написана о другом, а эта возможность упомянута там вскользь, и люди её просто не видят (как и саму статью). А теперь я буду целенаправленно отправлять сюда пользователей, чтобы максимально подробно давать ответ на данный вопрос.
Ответить
Михаил, напишите какой-то уникальный способ защиты от накрутки голосваний, если пользователь не зарегистрирован. Ограничение по ip-адрес не пойдет, можно прокси использовать и динамический. Куки можно почистить. Если суммировать всю инфу пользователя (имя браузера, айпишник и т.д.), тоже не пойдет. Возможно вам известен другой способ, для 99,99% защиты от накрутки (для не незарегистрированных пользователей) ? Прошу написать статьи, в которой описаны все известные вам методы.
Ответить
Таких способов не существует. Ограничения по IP более, чем достаточно. А с куками будет ещё больше проблем у накрутчика. Тут надо понимать, что кто захочет, тот всегда накрутит. Но это вряд ли кому-то будет нужно. А от единичных бездельников, которые проголосуют 5 раз, вместо 1-го, потратив на это время в поиске новых и новых прокси, никакого вреда не будет.
Ответить
Ну почему у накрутчика с куками будет больше проблем, чем со сменой айпи адреса ? Ведь чтобы айпишник сменить, придется переподключаться, что занимает время, а куки сразу можно потереть в настройках браузера. Лично я сам недавно на одном из сайтов за 7 часов проголосовал 500+ раз, просто выдернув из сайта скрипт голосования и поставив на ночь автокликер, которые переподключал сеть и обновлял скрипт и полетела вся надежность системы голосования к чертям. Все же хочется в будущем себя обезопасить от подобных изъянов.
Ответить
Вообще не догоняю зачем Вам это нужно то было? И вообще какой от этого смысл??? Нечем людям заняться...
Ответить
Спросил, значит надо ! Например опросник на сайте создать или голосование публичное, например выбор сотрудника года, пример множество. Смысл есть во всем. Моё дело предложить тему для статьи, может свои идеи предложите, чем других критиковать ?
Ответить
Я Имел ввиду зачем Вам было нужно 500+ раз голосовать за 7 часов? Какой вам от того был толк? Типа спамера?
Ответить
Аааа, Pardon. Просто там был уже лидер, нужно было его обогнать по голосам, а времени в обрез.
Ответить
Я имел ввиду и защиту по IP, и защиту по кукам. А не только по кукам. А что касается автокликеров, поставьте капчу. Понятно, что и её можно расшифровать, но не существует 100% защиты. А если голосование очень важное, то не надо его делать для всех желающих, сделайте только для зарегистрированных пользователей. В конце концов, не забывайте про математическую статистику. Если ежедневно было по 10-20 голосов, а потом вдруг было их 500, то очевидно, что это накрутка. Определяете, за что голосовали, и удаляете эти 500 голосов.
Ответить
В общем понятно. На будущее пригодятся знания. Спасибо за помощь !
Ответить
echo "Ваш браузер: $browser"; Тогда уж лучше echo "Ваш браузер: {$browser}"; или я не прав? Подскажите пожалуйста!
Ответить
Зачем фигурные скобки? Это же не smarty.
Ответить
Правильно echo "Ваш браузер: ".$browser !
Ответить
Та хоч printf("Ваш браузер:%s",$browser); нічого не міняється крім функцій і синтаксису
Ответить
Михаил! Опера, Сафари и Хром, кажется, работают на одном движке - этот способ в этих браузерах не работает. Или сегодня это уже не так актуально?
Ответить
Ну,не совсем так.Типы клиентов разные)
Ответить
В данном примере идёт сравнение имён браузеров и данных $user_agent. Слово "Safari" встречается у Оперы, Хрома и самого Сафари. А Слово "Opera" вообще не найдёт совпадений: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 OPR/22.0.1471.50 Может в ранних версиях по другому было, но сегодня этот пример не проходит.
Ответить
Допишите если Internet Explore старше 10 версии, то условие будет таким elseif (strpos($user_agent, "Trident") !== false) $browser = "Internet Explorer 10";
Ответить
Полностью рабочий вариант по крайней мере для браузеров актуальных на данный момент: $user_agent_browser = $_SERVER["HTTP_USER_AGENT"]; if (strpos($user_agent, "Firefox") !== false) $browser = "Firefox"; elseif (strpos($user_agent, "OPR") !== false) $browser = "Opera"; elseif (strpos($user_agent, "Chrome") !== false) $browser = "Chrome"; elseif (strpos($user_agent, "MSIE") !== false) $browser = "Internet Explorer 7"; elseif (strpos($user_agent, "Trident") !== false) $browser = "Internet Explorer"; elseif (strpos($user_agent, "Safari") !== false) $browser = "Safari"; else $browser = "Неизвестный"; echo "Ваш браузер: $browser";
Ответить
только не $user_agent_browser = $_SERVER["HTTP_USER_AGENT"]; а $user_agent = $_SERVER["HTTP_USER_AGENT"]; либо дальше везде тоже надо писать $user_agent_browser
Ответить
$user_agent_browser - это ведь просто переменная, которую Вы создаёте сами, так что в моём варианте, да нужно везде писать $user_agent_browser
Ответить
К сожалению с новой оперой такой вариант не канает((( выводит что она гугл хром, кто знает как исправить???
Ответить
elseif (strpos($user_agent, "OPR") !== false) $browser = "Opera";
Ответить
Спасибо
Ответить
С браузером Microsoft Edge не прокатывает. Пишет "Ваш браузер: Chrome".
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.