Все глюки и баги сайтa

Печать RSS
4573

A

Оранжевые штаны
0
substr($_SERVER['HTTP_USER_AGENT'],0,10)=='Opera/9.80' в этом условии именно Opera/9.80 обязательно, так как опера 9 версии имела юзерагент другого типа, а именно:
Opera/9.63 (Windows NT 6.0; U; en) Presto/2.1.1
далее сменилось на шаблон
Opera/9.80 ($OS; U; $LANGUAGE) Presto/$PRESTO_VERSION Version/$VERSION
В общем теперь, 3 вариант этого куска когда полностью рабочий, протестировал на IE, Firefox, Opera, Chrome и Safari, при маскировке под другие браузеры, то под что маскируется стоит в первую очередь, то есть strpos корректно определит, думаю не стоит выуживать истинный браузер, но все же нужно добавить другие не столь распространенные браузеры, иначе так же по старому будет типа Mozilla/4.0
Изменил: Azzido (14.07.2010 / 22:33)

Голубые штаны
0
ооо... теперь нормально) спасибо) себе тоже взял на всякий случай smile
********
Ваш положительный голос за пользователя Azzido успешно оставлен!
В данный момент его авторитет: 34
Всего положительных голосов: 34
Всего отрицательных голосов: 0
********
I

Пришелец
0
тут http://visavi.net/games/person.php?
неработает ссылка "Сражения" smile

Транклюкаторщик
0
766, код немного неправильный. Поменяй местами определения Internet Explorer`а.
В строке некоторых версий IE7 есть упоминание MSIE 6.0
и еще одна опечатка. на этот раз в пользовательской рекламе.
«Жирного» текста не бывает. Бывает только полужирный.
Автор
Господин ПЖ
0
766. Azzido, как-то ненадежно искать по 9.80
я тут нашел другой пример
<?php
function browser_info($agent) {

// Cигнатуру Opera ищем раньше ИЕ, т.к. опера иногда раньше обманывала,
// что она не опера, а ИЕ и добавляла себе ИЕшную сигнатуру "MSIE")

// Ищем сигнатуру Opera старый вариант: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 [ru]
if (ereg( 'Opera ([0-9].[0-9]{1,2})', $agent, $version)) :
$browse_type = "Opera";
$browse_version = $version[1];

// Ищем сигнатуру Opera новый вариант (версия живет отдельно): Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.22 Version/10.50
elseif (ereg( 'Opera/', $agent)):
ereg( 'Version/([0-9]{1,2}.[0-9]{1,2})', $agent, $version);
$browse_type = "Opera";
$browse_version = $version[1];

// Ищем сигнатуру Internet Explorer
elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $agent, $version)):
$browse_type = "IE";
$browse_version = $version[1];

// Ищем сигнатуру Firefox
elseif (ereg('Firefox/([0-9].[0-9]{1,2})', $agent, $version)):
$browse_type = "Firefox";
$browse_version = $version[1];

// Ищем сигнатуру Chrome
elseif (ereg( 'Chrome/([0-9].[0-9]{1,2})', $agent, $version)) :
$browse_type = "Chrome";
$browse_version = $version[1];

// Ищем сигнатуру Netscape
elseif (ereg( 'Netscape/([0-9].[0-9]{1,2})', $agent, $version)) :
$browse_type = "Netscape";
$browse_version = $version[1];

// Если все мимо
// значит наша функция этот браузер не знает
else :
$browse_type = "Unknown";
$browse_version = "Unknown";
endif;

// Возвращаем тип и версию браузера в виде массива
return array ($browse_type, $browse_version);
} 
только его надо переписать под preg
A

Оранжевые штаны
0
770. ЯщщЬ aka ZooM, согласен, но вот в таком виде встречается
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
то есть уже в конце строки перечисление что есть в системе, так же как и у хрома встреччается определение сафари, но вункция strpos ищет первое вхождение, то есть определит верно
A

Оранжевые штаны
0
771. Vantuz, я немного с этой функцией не согласен, Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 [ru] посылается не случайно, а в случае маскировки, есть в опере такая настройка, вот как это выглядит:
Представляться как Opera:
Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.60
Представляться как Firefox:
Mozilla/5.0 (Windows NT 5.1; U; ru; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.60
Представляться как MSIE:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; ru) Opera 10.60
Маскироваться под Firefox:
Mozilla/5.0 (Windows NT 5.1; U; ru; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6
Маскироваться под MSIE:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; ru)

я в функции, что писал, хотел учитывать и маскировку под другие браузеры и не определять настоящий. В общем, посмотрел еще и на функцию что ты привел и снова внес изменения в свою, все же уверен что это наиболее подходящий вариант
A

Оранжевые штаны
0
<?php

if(isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])){
$ua=strtok($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'],' ');
}
elseif(isset($_SERVER['HTTP_USER_AGENT'])){

// Проверяем на заголовки Opera
// Сначала тип 10 версии Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.60
// Если не найдено, то старые версии Opera/9.63 (Windows NT 6.0; U; en) Presto/2.1.1
if(substr($_SERVER['HTTP_USER_AGENT'],0,5)=='Opera'){
if(preg_match('!Version/([0-9]{1,2}\.[0-9]{1,2})!',$_SERVER['HTTP_USER_AGENT'],$matches)){
$ua='Opera/'.$matches[1];
}else{
$ua=strtok($_SERVER['HTTP_USER_AGENT'],' ');
}
}

// Проверяем на заголовки Opera в случае маскировки под другие браузеры
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Opera')){
if(preg_match('!Opera ([0-9]{1,2}\.[0-9]{1,2})!',$_SERVER['HTTP_USER_AGENT'],$matches)){
$ua='Opera/'.$matches[1];
}else{
$opera_false=TRUE;
}
}else{
$opera_false=TRUE;
}
A

Оранжевые штаны
0
<?php
if(isset($opera_false)){

if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 5.0')){
$ua='MSIE 5.0';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 6.0')){
$ua='MSIE 6.0';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 7.0')){
$ua='MSIE 7.0';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0')){
$ua='MSIE 8.0';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Chrome')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'Chrome'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Firefox')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'Firefox'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Safari')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'Safari'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Netscape')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'Netscape'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'SeaMonkey')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'SeaMonkey'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'OmniWeb')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'OmniWeb'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Minimo')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'Minimo'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'K-Meleon')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'K-Meleon'),' ');
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'],'Konqueror')){
$ua=strtok(strrchr($_SERVER['HTTP_USER_AGENT'],'Konqueror'),';');
}
else{
$ua=strtok($_SERVER['HTTP_USER_AGENT'],' ');
}

}

}else{
$ua='Unknown';
}
Изменил: Azzido (15.07.2010 / 08:22)
A

Оранжевые штаны
0
Можно функцию дорабатывать еще, основываясь на примеры различных юзерагентов, в том числе и устаревшие, например http://ru.wikipedia.org/wiki/User_Agent , самые популярные в юзерагенты уже есть
Изменил: Azzido (15.07.2010 / 08:24)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск