Статьи

Інформація про користувача на PHP - IP, браузер, операційна система, робот

  1. Як працює PHP клас визначення даних користувача по user-agent

Нещодавно мені потрібно було дізнатися назву браузера користувача сайту, для того щоб заборонити доступ до сайту певного браузеру. Заняття дурне, тому що будь-який користувач на сайті повинен відчувати себе комфортно незважаючи на якому він браузері, але з замовником не посперечаєшся, мабуть дизайн сайту не працював під певний браузер. В даному випадку варто змінити дизайнера а не жертвувати відвідувачами. Я не зупинився тільки на визначення браузера, мені хотілося додати в нього більше функціоналу для можливих майбутніх перевірок. У підсумку, клас вийшов досить компактним і динамічним в змінах.

На даний момент він видає:

  1. Назва браузера
  2. версія браузера
  3. Назва операційної системи
  4. Версія / ядро ​​операційної системи
  5. IP відвідувача
  6. перевірка: чи зайшов користувач з браузера
  7. перевірка: чи зайшов користувач з мобільного пристрою
  8. Назва марки / ос / браузера мобільного телефону, смартфона, планшета
  9. перевірка: чи є відвідувач роботом пошукових систем
  10. Який пошукової системи належить робот

Завантажити клас з прикладом

Як працює PHP клас визначення даних користувача по user-agent

З папки arrays завантажуються асоціативні масиви які містять абревіатури або короткі назву браузерів, операційних систем або роботів які зустрічаються в рядку user-agent яку ми отримуємо від браузера.

Після отримання даних, динамічно викликаються всі методи які мають префікс set_ і заповнюють змінні класу, тому що тільки вони є публічними і можна вивести і поза його межами видимості класу.

<? Php / * * Дані про користувача сайту * Автор: Mowshon * / class AboutGuest {public $ is_browser = False; public $ is_mobile = False; public $ is_robot = False; public $ browsers = array (); public $ operating_systems = array (); public $ mobiles = array (); public $ robots = array (); public $ ip = ''; public $ version = ''; public $ browser = ''; public $ browser_full_name = ''; public $ operating_system = ''; public $ os_version = ''; public $ robot = ''; public $ mobile = ''; public function __construct () {// Завантажуємо масиви для роботи з даними $ files = array ( 'browsers', 'operating_systems', 'mobiles', 'robots'); foreach ($ files as $ file) {$ this-> load ($ file); } // Дані користувача $ this-> agent = (@ $ _ SERVER [ 'HTTP_USER_AGENT'])? $ _SERVER [ 'HTTP_USER_AGENT']: ''; // Викликаємо методи для заповнення даних користувача $ setMethods = array ( 'set_ip', 'set_browser', 'set_operating_system', 'set_robot', 'set_mobile'); foreach ($ setMethods as $ method) {$ this -> $ method (); }} Private function load ($ file_and_array_name) {/ * * Завантажує масиви з папки з масивами * / $ Load = require_once (dirname (__FILE__)). '/Arrays/'.$file_and_array_name.'.php'; $ This -> $ file_and_array_name = (! Count ($ Load))? array (): $ Load; } Private function set_ip () {$ this-> ip = $ _SERVER [ 'REMOTE_ADDR']; return True; } Private function set_browser () {if (is_array ($ this-> browsers) and count ($ this-> browsers)> 0) {foreach ($ this-> browsers as $ key => $ val) {if (preg_match ( "|" .preg_quote ($ key). ". *? ([0-9 \.] +) | i", $ this-> agent, $ match)) {$ this-> is_browser = TRUE; $ This-> version = $ match [1]; $ This-> browser = $ val; $ This-> browser_full_name = $ match [0]; return True; }}} Return False; } Private function set_operating_system () {if (is_array ($ this-> operating_systems) AND count ($ this-> operating_systems)> 0) {foreach ($ this-> operating_systems as $ key => $ val) {if (preg_match ( "|" .preg_quote ($ key). ". *? ([a-zA-Z]? [0-9 \.] +) | i", $ this-> agent, $ match)) {$ this- > operating_system = $ val; $ This-> os_version = $ match [1]; return True; }}} $ This-> operating_system = 'Unknown'; } Private function set_robot () {if (is_array ($ this-> robots) AND count ($ this-> robots)> 0) {foreach ($ this-> robots as $ key => $ val) {if (preg_match ( "|" .preg_quote ($ key). "| i", $ this-> agent)) {$ this-> is_robot = TRUE; $ This-> robot = $ val; return TRUE; }}} Return FALSE; } Private function set_mobile () {if (is_array ($ this-> mobiles) AND count ($ this-> mobiles)> 0) {foreach ($ this-> mobiles as $ key => $ val) {if (FALSE! == (strpos (strtolower ($ this-> agent), $ key))) {$ this-> is_mobile = TRUE; $ This-> mobile = $ val; return TRUE; }}} Return FALSE; }}?> Ось приклад як виглядає масив з браузерами. Змінну яка буде містити сам масив вказувати не потрібно, достатньо почати код з return. Якщо даний файл викликати через require або require_once і результат виконання привласнити змінної, то дана змінна буде містити в собі масив (як це робить метод $ this-> load () в нашому класі). <? Php return array ( 'Flock' => 'Flock', 'SeaMoney' => 'SeaMonkey', 'Chrome' => 'Chrome', 'Opera' => 'Opera', 'MSIE' => 'Internet Explorer ',' Internet Explorer '=>' Internet Explorer ',' Shiira '=>' Shiira ',' Firefox '=>' Firefox ',' Chimera '=>' Chimera ',' Phoenix '=>' Phoenix ',' Firebird '=>' Firebird ',' Camino '=>' Camino ',' Netscape '=>' Netscape ',' OmniWeb '=>' OmniWeb ',' Safari '=>' Safari ',' Mozilla '=>' Mozilla ',' Konqueror '=>' Konqueror ',' icab '=>' iCab ',' Lynx '=>' Lynx ',' Links '=>' Links ',' hotjava '=>' HotJava ',' amaya '=>' Amaya ',' IBrowse '=>' IBrowse '); ?>

Головний метод конструктор "__construct" в момент виклику класу AboutGuest він виконується першим, тим самим грає ключову роль в роботі класу. Насамперед створює масиви даних для роботи інших методів. Об'єкт $ this-> agent содежіт в собі ніщо інше як $ _SERVER [ 'HTTP_USER_AGENT'] якого ми отримуємо від браузера і з нього витягуємо потрібну нам інформацію.

Метод $ this-> load ($ file_and_array_name) завантажувач

Даний метод завантажує з папки arrays масиви і привласнює їх змінної яка вказана в значенні атрибута $ file_and_array_name, даних атрибут так само є і назвою файлу з папки arrays.

Метод $ this-> set_ip ()

Повертає значення з масиву $ _SERVER з ключем REMOTE_ADDR, як відомо $ _SERVER [ 'REMOTE_ADDR'] це IP користувача який доступний браузеру.

Метож $ this-> set_browser () файл масиву: arrays / browsers.php

Після того як метод $ this-> load завантажив масиви, даний метод буде працювати з масивом з об'єкта $ this-> browsers. Як тільки він знаходить збіг ключа масиву з вмістом рядки з $ this-> agent він приймає присвоює об'єкту $ this-> browser значення ключа з масиву $ this-> browsers. Так, само даний метод привласнює і версію бразуер в $ this-> version. Так, як браузер вже знайшов збіг, не викликає сумніву, що користувач зайшов з браузера а не виконав візит на сайт через скрипт. Надаємо $ this-> is_browser значення True;

Метод $ this-> set_operating_system () файл масиву: arrays / operating_systems.php

Працює аналогічно як як метод $ this-> set_browser за виключення того, що як масив перевірки збігу він користується об'єктом $ this-> operating_systems який отримав масив з файлу arrays / operating_systems.php після виконання методу $ this-> load (). На жаль, браузери не настільки активно деют з версією операційної системи і іноді можна отримати незрозумілі цифри замість версії. Так, що будете обережні з коли користуєтеся $ this-> os_version. Назва операционой системи міститься в $ this-> operating_system (не плутати з $ this-> os_version)

Метод $ this-> set_robot () файл масиву: arrays / robots.php

Перевіряємо якщо відвідувач сайту не є роботом пошукових систем. Якщо він є роботом тоді значення для $ this-> is_robot буде TRUE; в значення $ this-> robot буде містити назву пошуковика який запустив робота на сайт (Google Bot, Yandex Bot, Rambler Bot ...)

Метод $ this-> set_mobile () файл масиву: arrays / mobiles.php

Працює аналогічно методу $ this-> set_operating_system (), тільки привласнює об'єкту $ this-> mobile назва марки телефону і значення $ this-> is_mobile буде TRUE в разі заходження з мобільного телефону, смартфона або планшета.

Приклад роботи:

&lt;? Php header ( 'Content-Type: text / html; charset = utf-8'); include_once ( 'AboutGuest.php'); $ AboutGuest = new AboutGuest; echo "Вихідні дані: $ AboutGuest-> agent <br /> <br /> IP: $ AboutGuest-> ip Браузер: $ AboutGuest-> browser версія: $ AboutGuest-> version <br /> Операційна система: $ AboutGuest-> operating_system версія: $ AboutGuest-> os_version <br /> <br /> Являюсь роботом? ". $ AboutGuest-> is_robot. &quot;<br /> Робот належить: $ AboutGuest-> robot <br /> <br /> Зайшов з мобільного?". $ AboutGuest-> is_mobile. &quot;<br /> Телефон: $ AboutGuest-> mobile <br /> <br />"; ?> Результат роботи скрипта в різних браузерах може бути по різному. Причина в тому, що браузери не видають PHP дані з $ _SERVER [ 'HTTP_USER_AGENT'] однаково, в добавок, через CRON або file_get_contents можна відправити PHP будь штучне значення для $ _SERVER [ 'HTTP_USER_AGENT'] і з цим вже нічого не поробиш. Вихідні дані: Mozilla / 5.0 (X11; Ubuntu; Linux i686; rv: 13.0) Gecko / 20100101 Firefox / 13.0.1 IP: 127.0.0.1 Браузер: Firefox версія: 13.0.1 Операційна система: Ubuntu версія: i686 Вихідні дані: Mozilla /5.0 (X11; Linux i686) AppleWebKit / 535.19 (KHTML, like Gecko) Ubuntu / 12.04 Chromium / 18.0.1025.168 Chrome / 18.0.1025.168 Safari / 535.19 IP: 127.0.0.1 Браузер: Chrome версія: 18.0.1025.168 Операційна система: Ubuntu версія: 12.04

Вдалих вам скриптів і нехай прибуде з вами звичка поділу коду на TAB блоки!

Lt;?
Php'; $ This -> $ file_and_array_name = (! Count ($ Load))?
A-zA-Z]?
Lt;?
Quot;<br /> Робот належить: $ AboutGuest-> robot <br /> <br /> Зайшов з мобільного?
Quot;<br /> Телефон: $ AboutGuest-> mobile <br /> <br />"; ?

Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал

Как оформить диск малыш от рождения до года из фото и видео
Оформить диск "Малыш от рождения до года" из фото и видео можно совершенно разными способами! Кто-то для достижения данной цели идет на шоу-таланты, кто-то пользуется услугами профессионалов, а кто-то