Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Разрешения
Форумы портала PHP.SU » » Вопросы новичков » Разрешения

Страниц (1): [1]
 

1. maragon - 08 Июля, 2011 - 08:09:39 - перейти к сообщению
Копал в сторону HTTP_USER_AGENT, так и не получилось.
Хочу дать добро только для браузеров opera\chrome\ etc..
Как можно организовать без бд?
2. DeepVarvar - 08 Июля, 2011 - 08:13:40 - перейти к сообщению
Я видел у джумлы в движке достаточно полный (около 150) список браузеров.
В списке даже lynx есть и айпод.
Перечисление идет в виде массива.
Вам видимо тот же принцип.
3. White - 08 Июля, 2011 - 08:33:52 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $browser = get_browser(null, true);
  3. echo $browser['browser'];
  4.  
4. grefon - 08 Июля, 2011 - 09:00:19 - перейти к сообщению
White, эта штука есть на очень ограниченном количестве хостингов. Я в подобных ситуациях пользуюсь UASparser классом. Если нужно, распишу более подробно с примером.
5. White - 08 Июля, 2011 - 09:03:50 - перейти к сообщению
grefon пишет:
Если нужно, распишу более подробно с примером

любопытно, хотелось бы взглянуть
grefon пишет:
эта штука есть на очень ограниченном количестве хостингов

интересно, с чем связаны такие ограничения?
6. grefon - 08 Июля, 2011 - 09:24:58 - перейти к сообщению
White пишет:
любопытно, хотелось бы взглянуть

Вот в работе: http://grefon[dot]com/primer/
Архив с исходником прикрепляю.

С помощью класса можно определить тип браузера и в зависимости от этого разрешать дальнейшие действия или нет.

White пишет:
интересно, с чем связаны такие ограничения?


Честно говоря не знаю. Когда-то сталкивался и из 5 хостингов только на одном функция работала корректно. Скорей всего из за того что хостеры не хотят следить за всяческими обновлениями browscap.ini.
7. White - 08 Июля, 2011 - 10:15:51 - перейти к сообщению
grefon пишет:
С помощью класса можно определить тип браузера и в зависимости от этого разрешать дальнейшие действия или нет.


даже проще, отредактировать userdata.ini, убрав оттуда все ненужные браузеры, и упростить класс
PHP:
скопировать код в буфер обмена
  1.  
  2. class UASparser
  3. {
  4.         public $cache_dir       = null;
  5.         public $useragent       = null;
  6.  
  7.         private $_data                  = array();
  8.         private $test                   = null;
  9.        
  10.         public function __construct() {
  11.         }
  12.  
  13.         public function Parse($useragent = null) {
  14.                 $match=false;
  15.                 $this->useragent = $_SERVER['HTTP_USER_AGENT'];
  16.                 $_data = $this->_loadData();
  17.                 if($_data) {
  18.  
  19.                         // crawler
  20.                         foreach ($_data['robots'] as $test) {
  21.                                 if ($test[0] == $useragent) {
  22.                                         $match=true;
  23.                                 }
  24.                         }
  25.                        
  26.                         // browser
  27.                         foreach ($_data['browser_reg'] as $test) {
  28.                                 if (@preg_match($test[0],$useragent)) {
  29.                                         $match=true;
  30.                                         break;
  31.                                 }
  32.                         }
  33.                 }
  34.                 return $match;
  35.         }
  36.  
  37.         private function _loadData() {
  38.                 if (file_exists($this->cacheDir.'/uasdata.ini')) {
  39.                         return @parse_ini_file($this->cacheDir.'/uasdata.ini', true);
  40.                 }
  41.                 else {
  42.                         die('ERROR: No datafile (uasdata.ini in Cache Dir), maybe update the file manually.');
  43.                 }
  44.         }
  45.  
  46.         public function SetCacheDir($cache_dir) {
  47.                 if (!is_writable($cache_dir)) {
  48.                         die('ERROR: Cache dir('.$cache_dir.') is not writable');
  49.                 }
  50.                 $cache_dir = realpath($cache_dir);
  51.                 $this->cacheDir = $cache_dir;
  52.         }
  53. }
  54.  
8. maragon - 08 Июля, 2011 - 10:26:59 - перейти к сообщению
А проще вар-ы есть еще у кого? Хорошо

 

Powered by ExBB FM 1.0 RC1