Dependendo do seu projeto web, você precisará identificar qual navegador o seu site está sendo acessado, seja para guardar informações estatísticas ou para fazer uma apresentação personalizada para um determinado navegador.
Atualmente, é uma missão quase impossível, identificar com PHP, por qual navegador o seu site está sendo acessado. Visto que, o parâmetro utilizado para identificar o navegador é o HTTP_USER_AGENT, que não contem informações consistentes e únicas que identifique o navegador utilizado.
Fizemos um teste para validar as informações fornecidas pelo HTTP_USER_AGENT, na versão mais atual dos principais navegadores utilizados, através de um computador com Windows 10 instalado, os resultados que obtemos foram estes abaixo:
- Google Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 - Mozilla Firefox:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0 - Microsoft Edge:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362 - Microsoft Internet Explorer:
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko - Opera:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.71
Em nosso projeto para esse blog, com o objetivo de aumentar a performance do site, colocamos uma opção que nos permite substituir as imagens jpg ou png por svg. Entretanto, navegadores que não receberam mais atualizações como o Internet Explorer, costuma quebrar o layout do site quando utilizado o svg. Então optamos por realizar a validação, mantendo as imagens originais, quando acessado por esse navegador.
A solução que utilizamos para identificar o navegador segue abaixo:
$navegador = filter_input(INPUT_SERVER, "HTTP_USER_AGENT", FILTER_DEFAULT);
$browsers = array(
'amaya' => 'Amaya',
'Camino' => 'Camino',
'Chimera' => 'Chimera',
'Chrome' => 'Chrome',
'Edge' => 'Edge',
'Firebird' => 'Firebird',
'Firefox' => 'Firefox',
'Flock' => 'Flock',
'hotjava' => 'HotJava',
'IBrowse' => 'IBrowse',
'icab' => 'iCab',
'Internet Explorer' => 'Internet Explorer',
'Konqueror' => 'Konqueror',
'Links' => 'Links',
'Lynx' => 'Lynx',
'Maxthon' => 'Maxthon',
'Mozilla' => 'Mozilla',
'MSIE' => 'Internet Explorer',
'Netscape' => 'Netscape',
'OmniWeb' => 'OmniWeb',
'Opera' => 'Opera',
'Opera.*?Version' => 'Opera',
'Phoenix' => 'Phoenix',
'Safari' => 'Safari',
'Shiira' => 'Shiira',
'Trident.* rv' => 'Internet Explorer',
'Ubuntu' => 'Ubuntu Web Browser',
'OPR' => 'Opera'
);
if (strpos($navegador, 'Edge')):
$browserDetect = 'Edge';
elseif (strpos($navegador, 'OPR')):
$browserDetect = 'Opera';
else:
$browserDetect = null;
foreach ($browsers as $key => $value):
if (preg_match('|' . $key . '.*?([0-9\.]+)|i', $navegador)):
$browserDetect = $value;
endif;
endforeach;
endif;
if (!empty($browserDetect)):
echo $browserDetect;
else:
echo 'Desconhecido';
endif;
Como pode observar no bloco de código acima, primeiramente tentamos identificar os dois únicos navegadores que possui uma certa exclusividade na identificação, somente depois, caso não identificado, que realizamos a validação geral.
Como pode ver também, essa validação não é precisa. Possui falhas que não garantem o resultado desejado, mas é útil em situações como a nossa.
Se você conseguiu encontrar alguma outra solução mais precisa, compartilhe conosco!
