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!