Для нормальной работы сайта необходимо разрешить JavaScript, включая скрипты с доменов googlesyndication.com и doubleclick.net для отображения системы поиска по сайту и прочих сервисов Google.

Расширенная идентификация браузеров в PHP, browscap, browscap.ini, get_browser()

logo

rip-ie6 В PHP есть возможность расширенной идентификации браузеров при помощи функции get_browser(), которая даёт более насыщеную информацию о браузере нежели $_SERVER['HTTP_USER_AGENT']. Для полноценной работы этой функции требуется файл сведений browscap.ini о браузерах и соответствующая настройка директивы "browscap" в "php.ini" или "httpd.conf".

browscap.ini не поставляется вместе с PHP, но его последнюю версию можно скачать здесь: » php_browscap.ini. Для работы функции get_browser() необходимо определить директиву "browscap" в "php.ini" или "httpd.conf" в которой указать корректный путь к файлу browscap.ini.

Как ранее упоминалось, директиву "browscap" которая относится к категории "PHP_INI_SYSTEM" мы не сможем определить в пользовательском конфигурационном файле ".htaccess" - это можно сделать только в "php.ini" или "httpd.conf":

# httpd.conf
php_value browscap "/path/browscap/browscap.ini"
; php.ini
;browscap = extra/browscap.ini

browscap.ini содержит в себе информацию о большинстве браузеров, и для поддержания его базы актуальном состоянии он требует регулярных обновлений. На основании базы данных заложенной в browscap.ini РНР функция get_browser() выдаёт расширенную информацию в РНР массиве отталкиваясь от значения $_SERVER['HTTP_USER_AGENT']:

get_browser ([ string $user_agent [, bool $return_array = false ]] );

user_agent - Параметр может быть пропущен, если его значение будет равно NULL. В этом случае будет использоваться значение $_SERVER['HTTP_USER_AGENT'].


return_array - Если равен TRUE, то функция вернет массив (array) вместо объекта (object).

Следующий РНР пример вернёт массив значений/свойств которые поддерживаются браузером зашедшего на сайт пользователя но, следует иметь ввиду, что значения таких свойств как frames, iframes, tables, cookies, backgroundsounds, vbscript, javascript, javaapplets, activexcontrols, если они поддерживаются браузером но, их выполнение запрещено пользователем в настройках браузера - они всегда будут равны = 1!:

$browser = get_browser(null, true);
print_r($browser);
 
Array
(
    [browser_name] => Opera/9.80 (Windows NT 5.1; U; Edition Ukraine Local; ru) 
        Presto/2.10.229 Version/11.60
    [browser_name_regex] => ^opera/9\.80.*\(.*windows nt 5\.1.*\).*version/11\..*$
    [browser_name_pattern] => Opera/9.80*(*Windows NT 5.1*)*Version/11.*
    [Parent] => Opera 11.10
    [Platform] => WinXP
    [Browser] => Opera
    [Version] => 11.10
    [MajorVer] => 11
    [MinorVer] => 10
    [Win32] => 1
    [Frames] => 1
    [IFrames] => 1
    [Tables] => 1
    [Cookies] => 1
    [JavaScript] => 1
    [JavaApplets] => 1
    [CssVersion] => 3
    [Alpha] => 
    [Beta] => 
    [Win16] => 
    [Win64] => 
    [BackgroundSounds] => 
    [VBScript] => 
    [ActiveXControls] => 
    [isBanned] => 
    [isMobileDevice] => 
    [isSyndicationReader] => 
    [Crawler] => 
    [AolVersion] => 0
)

Бывают такие случаи когда на том или ином хостинге попадаются ленивые или недостаточно осведомлённые, о наличии в РНР функции get_browser(), администраторы, а поэтому РНР директива "browscap" остаётся не определённой.

Потому как РНР директива относится к категории "PHP_INI_SYSTEM" и не подлежит определению в пользовательском конфигурационном файле ".htaccess", то в таком случае возникает проблема с использованием РНР функции get_browser(), которая проявляется в сообщении:

Warning: get_browser() [function.get-browser]: browscap ini directive not set 
    in /home/php.com/browscap/browscap.php on line 6

Для таких случаев можно использовать РНР класс "Browser Capabilities PHP Project", который удалённо обращается к файлу "browscap.ini", кеширует его в установленной директории и после выполняя функцию get_browser() анализирует $_SERVER['HTTP_USER_AGENT'] строку агента пользователя. Ранее "Browser Capabilities PHP Project" размещался на "code.google.com", а ныне переехал на "github.com" откуда и можно загрузить свежую версию этого РНР класса.

Для использования этого РНР класса достаточно создать РНР скрипт, например "browscap.php", с таким содержанием:

<?php 
 
// Loads the class
require './inc/Browscap.php';
 
// Creates a new Browscap object (loads or creates the cache)
$bc = new Browscap('./cache');
 
// Использовать локальный файл "php_browscap.ini"
$bc->localFile = './inc/php_browscap.ini';
 
// Gets information about the current browser's user agent
$browserIni = $bc->getBrowser();
// Output the result
echo '<pre>'; // some formatting issues ;)
print_r($browserIni);
echo '</pre>';

Каталоги "./inc/" и "./cache" нужно будет создать вручную там, где расположен "browscap.php", в каталог "./inc/" распаковать РНР класс "Browser Capabilities PHP Project" и туда же поместить файл "php_browscap.ini".

Если запрещено использование функций file_get_contents(), fsockopen() и не указан локальный $bc->localFile = './inc/php_browscap.ini';, то в результате мы получим такие сообщения об ошибках:

-------------------------------------------------
Warning: file_get_contents(http://browsers.garykeith.com/stream.asp?BrowsCapINI) 
    [function.file-get-contents]: failed to open stream: Попытка установить 
    соединение была безуспешной, т.к. от другого компьютера за требуемое время не
    получен нужный отклик, или было разорвано уже установленное соединение из-за 
    неверного отклика уже подключенного компьютера. in 
    /home/php.com/browscap/browscap/Browscap.php on line 596
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo 
    failed: Этот хост неизвестен. in /home/php.com/browscap/browscap/Browscap.php 
    on line 603
Warning: fsockopen() [function.fsockopen]: unable to connect to 
    browsers.garykeith.com:80 (php_network_getaddresses: getaddrinfo failed: 
    Этот хост неизвестен. ) in /home/php.com/browscap/browscap/Browscap.php 
    on line 603
    Fatal error: Uncaught exception 'Browscap_Exception' with message 
    'Your server can't connect to external resources. Please update the file 
    manually.' in /home/php.com/browscap/browscap/Browscap.php:654 
    Stack trace: #0 /home/php.com/browscap/browscap/Browscap.php(453): 
    Browscap->_getRemoteData('http://browsers...') 
    #1 /home/php.com/browscap/browscap/Browscap.php(318): 
    Browscap->_getRemoteIniFile('http://browsers...', '/home/php....') 
    #2 /home/php.com/browscap/browscap/Browscap.php(234): Browscap->updateCache() 
    #3 /home/php.com/browscap/browscap.php(16): Browscap->getBrowser() 
    #4 {main} thrown in /home/php.com/browscap/browscap/Browscap.php on line 654
-------------------------------------------------

Хотя РНР класс "Browser Capabilities PHP Project" и не является особо большим и не создаёт слишком большой нагрузки на сервер но, всё же какую то нагрузку на сервер он добавляет и во избежание неоправданного использования РНР класса "Browser Capabilities PHP Project" можно использовать такую конструкцию:

if(@get_browser())
{
    // О чудО! админ хоста настроил директиву "browscap"
    $browserIni = get_browser(null, true);
}
else
{
    // Loads the class
    require './inc/Browscap.php';
 
    // Creates a new Browscap object (loads or creates the cache)
    $bc = new Browscap('./cache');
 
    // Использовать локальный файл "php_browscap.ini"
    $bc->localFile = './inc/php_browscap.ini';
 
    // Gets information about the current browser's user agent
    $browserIni = $bc->getBrowser();
    // Output the result
    echo '<pre>'; // some formatting issues ;)
    print_r($browserIni);
    echo '</pre>';
}

В случае когда директива "browscap" не определена будет использован РНР класс "Browser Capabilities PHP Project", который вернёт не массив, а объект класса:

stdClass Object
(
    [browser_name] => Opera/9.80 (Windows NT 5.1; U; Edition Ukraine Local; ru) 
        Presto/2.10.229 Version/11.60
    [browser_name_regex] => ^opera/9\.80.*\(.*windows nt 5\.1.*\).*version/11\..*$
    [browser_name_pattern] => Opera/9.80*(*Windows NT 5.1*)*Version/11.*
    [Parent] => Opera 11.10
    [Platform] => WinXP
    [Browser] => Opera
    [Version] => 11.10
    [MajorVer] => 11
    [MinorVer] => 10
    [Win32] => 1
    [Frames] => 1
    [IFrames] => 1
    [Tables] => 1
    [Cookies] => 1
    [JavaScript] => 1
    [JavaApplets] => 1
    [CssVersion] => 3
    [Alpha] => 
    [Beta] => 
    [Win16] => 
    [Win64] => 
    [BackgroundSounds] => 
    [VBScript] => 
    [ActiveXControls] => 
    [isBanned] => 
    [isMobileDevice] => 
    [isSyndicationReader] => 
    [Crawler] => 
    [AolVersion] => 0
)

Получить доступ к свойствам которого можно, в зависимости от типа вернувшихся данных, следующим образом:

if(is_array($browserIni))
{
    echo $browserIni['JavaScript'];
}
elseif(is_object($browserIni))
{
    echo $browserIni->JavaScript;
}

РНР класс "Browser Capabilities PHP Project" не стоит использовать без особой на то необходимости но, уж если вы решили, что использование РНР класса "Browser Capabilities PHP Project" является оправданным, то при его использовании не забывайте проверять свойство "Crawler" ибо в противном случае поисковые боты могут обидится и будут обходить ваш сайт стороной!;)

Кстати там же где и "php_browscap.ini", можно скачать готовый файл "robots.txt" с большим списком известных вредных роботов и всяческих менеджеров загрузки которым желательно запретить доступ к сайту.

Автор: Олег Головский

Рекомендуемый контент


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Добавить комментарий

АХТУНГ! Все комменты модерасятся модерастом. Мессаги исключительно рекламного или оскорбительного содержания не публикуются, а поэтому злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах! Разумная же критика, замечания, дополнения и хвалебные оды приветствуются, также допускается легкий флуд или троллинг :)


Защитный код
Обновить

Рейтинг@Mail.ru 2 megabytes