PHP - Отображение сообщений в определенных браузерах


Я искал это, и все, что я нахожу, намного больше, чем мне нужно. Я уже делал это на JavaScript раньше, но я бы действительно предпочел использовать PHP. Как бы я отображал сообщение своим посетителям, в зависимости от того, какой браузер они используют?

Пример:

Пользователь IE увидит: "Вы используете Internet Explorer"

Пользователь Firefox увидит: "Вы используете Mozilla Firefox"

Я не совсем уверен, есть ли другие основные браузеры, кроме IE, Firefox, Chrome, Safari и Opera. Но я бы, по крайней мере, хотел, чтобы сообщение было направлено каждому из этих браузеров по отдельности. Спасибо.

Author: JasonMArcher, 2009-09-03

5 answers

Чтобы определить серверную часть браузера пользователя, вам придется проанализировать переменную $_SERVER['HTTP_USER_AGENT']...


... Или, возможно, лучше использовать get_browser функция - просто обратите внимание, что вам придется что-то настроить в php.ini, или вы получите такое предупреждение:

Warning: get_browser() [function.get-browser]: browscap ini directive not set

Как написано на странице руководства по PHP:

Примечание: Для того, чтобы это работало, ваш параметр конфигурации browscap в php.ini должен указывать на правильный расположение файл browscap.ini в вашей системе. browscap.ini не поставляется в комплекте с PHP, но вы можете найти в актуальном состоянии"php_browscap.ini файл здесь.

Хотя browscap.ini содержит информацию о многих браузерах, он полагается на обновления пользователей для поддержания актуальности базы данных. Формат файла достаточно понятен.


После загрузки этого файла и добавления этой строки в php.ini:

browscap = /home/squale/developpement/tests/temp/php_browscap.ini

Следующая часть кода :

var_dump(get_browser(null, true));

Дает мне:

array
  'browser_name_regex' => string '^mozilla/5\.0 (x11; .*linux.*; .*rv:1\.9.*) gecko/.*$' (length=53)
  'browser_name_pattern' => string 'Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*' (length=44)
  'parent' => string 'Mozilla 1.9' (length=11)
  'platform' => string 'Linux' (length=5)
  'browser' => string 'Mozilla' (length=7)
  'version' => string '1.9' (length=3)
  'majorver' => string '1' (length=1)
  'minorver' => string '9' (length=1)
  'alpha' => string '1' (length=1)
  'frames' => string '1' (length=1)
  'iframes' => string '1' (length=1)
  'tables' => string '1' (length=1)
  'cookies' => string '1' (length=1)
  'javaapplets' => string '1' (length=1)
  'javascript' => string '1' (length=1)
  'cssversion' => string '2' (length=1)
  'supportscss' => string '1' (length=1)
  'beta' => string '' (length=0)
  'win16' => string '' (length=0)
  'win32' => string '' (length=0)
  'win64' => string '' (length=0)
  'backgroundsounds' => string '' (length=0)
  'cdf' => string '' (length=0)
  'vbscript' => string '' (length=0)
  'activexcontrols' => string '' (length=0)
  'isbanned' => string '' (length=0)
  'ismobiledevice' => string '' (length=0)
  'issyndicationreader' => string '' (length=0)
  'crawler' => string '' (length=0)
  'aol' => string '' (length=0)
  'aolversion' => string '0' (length=1)

В firefox 3.5; и:

array
  'browser_name_regex' => string '^.*$' (length=4)
  'browser_name_pattern' => string '*' (length=1)
  'browser' => string 'Default Browser' (length=15)
  'version' => string '0' (length=1)
  'majorver' => string '0' (length=1)
  'minorver' => string '0' (length=1)
  'platform' => string 'unknown' (length=7)
  'alpha' => string '' (length=0)
  ....
  'aol' => string '' (length=0)
  'aolversion' => string '0' (length=1)

В последней версии (4.0.203.2) google chrome для Linux - ну, учитывая, что это какая-то ночная сборка, я полагаю, это нормально, что она не распознается...

В качестве ссылки приведем строку агента пользователя:

string 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0' (length=109)


Это показывает, что get_browser is приятно; но, возможно, не идеально подходит для некоторых передовых тестовых браузеров - тем не менее, должно хорошо работать с большинством "распространенных" браузеров, я предположим...

 6
Author: Pascal MARTIN, 2009-09-03 09:25:03

Большинство клиентов отправляют строку агента пользователя , и вы можете использовать get_browser, чтобы "перевести" эту строку во что-то более "информативное".
Но клиент hte может отправлять любую строку, которую он хочет, например, браузеры opera, которые идентифицируют себя как internet Explorer.

 2
Author: VolkerK, 2009-09-03 09:15:36

Я думаю, что единственный способ обнаружить браузер в PHP - это использовать пользовательский агент, из HTTP_USER_AGENT.

Или с помощью функции PHP get_browser() -> http://us3.php.net/function.get-browser

 0
Author: ntcong, 2009-09-03 09:21:46
&lt?php
  $browser = get_browser();
  echo 'You using '.$browser['browser'];
?&gt

Дополнительная информация на http://www.php.net/function.get-browser

Вы можете получить файл browscap.ini здесь http://browsers.garykeith.com/downloads.asp

 0
Author: Alexey Sviridov, 2009-09-03 16:21:31

На самом деле нет хорошего способа определить возможности браузера на стороне сервера, поскольку каждый пользователь, независимо от версии своего браузера, может манипулировать настройками браузера, таким образом получая различные возможности (например, отключение Java).

Вам следует прибегнуть к клиентской стороне в сочетании с серверной, существует множество библиотек jscript, которые могут это сделать, например, текст ссылки

 0
Author: MindFold, 2010-02-13 13:16:56