Como identificar o navegador utilizado em PHP

Olá!

Trabalhando em um projeto de um cliente da Verticis, nos deparamos com um problema, a incompatibilidade do código em certos navegadores. Como resolver isto? Não poderia alterar o código-fonte e não desejava fazer alguma “gambiarra” para contornar a situação. Desta maneira, recorri ao PHP para resolver o problema.

php-navegador

Pesquisando na internet, encontrei informações sobre o a variável de servidor $_SERVER, que é um array contendo informações sobre o servidor e a conexão com o mesmo. Dentre das informações contidas, temos HTTP_USER_AGENT, que informa o conteúdo do header User-Agent.

O retorno desta função pode ser algo como o exemplo abaixo (irá variar de acordo com o navegador utilizado):

  Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.2.8)  Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729) FirePHP/0.4

Bom, com estas informações, e com a ajuda da expressão regular, conseguimos realizar um browser checker, verificando alguns navegadores pré-definidos:

A saída será o navegador e sua respectiva versão. Basta manipular este código para sua necessidade.

Até a próxima!

*Post inspirado em “How to check the user’s browser type and platform”

http://www.php-scripts.com/20050912/12/

26 Comentários
  • Responder Tiago

    30 de agosto de 2010, 17:53

    O artigo está claro e bem escrito. Entretanto, cabe um pequeno alerta: o uso desse tipo de identificação está sujeito a erros, visto que depende de informação passada pelo navegador ao servidor (por conseguinte, adulterável). Se o problema for com incompatibilidade de código Javascript, o mais seguro a fazer é verificar se “objetos” e funções existem antes de serem chamados. Se o problema for com o layout ou design da página, a coisa pode se complicar um pouco (a menos que sejam usados hacks).
    Obs.: para verificar como é fácil adulterar o user agent, basta acessar a página about:config do Firefox e procurar pelas configurações que começam com general.useragent

    😉

  • Responder Adriano Ricardo Alves Nunes

    14 de outubro de 2010, 16:06

    Olá parceiro, muito legal seu artigo, estava precisando desta verificação de vários navegadores, parabéns pela postagem, gostaria de saber se você esta utilizando o sistema WordPress em seu site, para postar estes artigos, construí um blog a pouco tempo que gostaria de postar codificação desta maneira que você postou, dentro de uma espécie de box e que reconheça automaticamente o PHP, poderia me informar como eu faço este tipo de postagem?
    Des de já agradeço a atenção
    Abraços.

  • Responder João Paulo Zica

    15 de outubro de 2010, 10:43

    Olá Adriano,

    obrigado pelo elogio e espero que o post tenha sido realmente proveitoso.

    Estamos utilizando o WordPress 3.1 no blog sim. Para a formatação específica para códigos como você mencionou eu escolho primeiramente a formatação “Pré-formatado” na aba “Visual” de criação do Post. Em seguida, clico na aba “HTML” e, onde existe o texto pré-formatado “&#60pre>”, adiciono o atributo lang=”php”, ficando &#60pre lang=”php”>. Desta maneira o código será exibido como neste tutorial.

    Você pode fazer a formatação para outras linguagens, como jsp e xml.

    Abraços

  • Responder Claudio

    11 de novembro de 2010, 01:40

    Obrigado pelo código cara você salvou o tema que eu estava criando, pois tive que usar png 24bits em uma animação jquery e não tive como colocar essa imagem de background, o que evita usar a correção iepngfix, pois ela só trabalha em imagens de fundo.

    Com seu código pude fazer uma verificação do navegador ie-6 e adicionar um caminho para só nele pegar a outra imagens menos bonita, mas feita em png-8 com indexcolor.
    Ai funcionou perfeitamente, menos bonito um pouco para ie-6, mas totalemnte funcional, só perdeu mesmo as sombras do png-24 que dam um toque melhor ao visual.

    Se interessar pra alguém deixou a minha solução, então o meu código ficou assim.


    $useragent = $_SERVER['HTTP_USER_AGENT'];
    if (preg_match('|MSIE ([0-9].[0-9]{1,2})|',$useragent,$matched)) {
    $browser_version=$matched[1];
    }
    if($browser_version == 6.0) {
    $i = '/images-ie';
    }

    na imagem em html deixei

    src="/images/moni2.png"

    se não for ie-6 não retorna nada na variável e não muda nada para os outrso navegadores, para o ie-6 adiciona a pasta /iamges-ie

    bom, já são quase duas da manhã e só agora eu ganhei meu dia, graças a você.
    Valeu mesmo.

  • Responder João Paulo Zica

    11 de novembro de 2010, 14:03

    Claudio,

    que bom que o post lhe auxiliou a resolver seu problema!

    Obrigado por compartilhar resolução conosco!

    Abraços!

  • Responder Adriano Ricardo

    21 de novembro de 2010, 00:38

    Muito obrigado pela explicação, consegui resolver com um plugin onde basta colocar a codificação entre [php]codificação[/php] e da tudo certo, mas muito obrigado pela dica pois não sabia como fazer por esta forma que você descreveu, e me desculpe pela demora na resposta, estive uns tempos ocupado, abraços.

  • Responder victor

    19 de abril de 2011, 16:28

    aaaaaah que show
    adorei esse site
    perfeito ;

  • Responder Thiago Henrique

    28 de dezembro de 2011, 14:10

    Muito legal o codigo coloquei em uma pagina de teste funcionou, agora como faço para colocar dentro de widget do meu blog ?

  • Responder Fernando Moreira

    23 de março de 2012, 17:42

    Cara isso me quebrou um ganho heim! Valew!

  • Responder Thiago Toledo Thiago Toledo

    9 de abril de 2012, 12:16

    Senhores,

    O script ficou bem bacana, mas CUIDADO com a utilização para verificação de versão do INTERNET EXPLORER, pois na versão 8.0 do navegador ele pode indicar versão 7.0, devido, possivelmente, existir um modo de compatibilidade para páginas que trabalham melhor com  o browser IE mais antigo.

     

  • Responder Jesus

    20 de agosto de 2012, 12:59

    Obrigado cara. Muito bacana o seu codigo.

  • Responder Flamaury

    12 de outubro de 2012, 22:39

    João Paulo,

    Muito bom o seu o codigo; me ajudou muito a resolver um problema que eu tinha com um script que dava incompatibilidade com o IE em versões anteriores ao 9.0.

    Obrigado e Abraços!

    Flamaury

  • Responder Willian Mendes

    8 de novembro de 2012, 10:41

    bom dia sou novo em php,
    qual seria a função se eu quisesse direcionar cada navegador a uma pagina diferente

  • Responder Rodrigo

    16 de abril de 2013, 13:03

    João, usando esse seu código no Internet Explorer 10, ele retorna $browser = ‘other’. Ou seja, não está reconhecendo o IE 10. Eu não entendo de expressão regular por isso não adaptei aqui. Pode me ajudar?

  • Responder Bruno Douglas

    31 de julho de 2013, 00:04

    Wow! Um Post de mais de 3 anos e continua ajudando a galera! Acabou de me ajudar! 🙂 Vale brother!

  • Responder Karlos

    9 de setembro de 2013, 13:07

    Perfeito! Obrigado pelo tutorial!

  • Responder Fragata

    29 de novembro de 2013, 13:12

    Valeu mesmo cara, eu uso javascript e php, mas queria uma solução em php, esse código ajudou bastante.

  • Responder Charles Corrêa

    18 de maio de 2014, 08:10

    dei uma modificada pois não estava reconhecendo internet explorer 10 e 11 nem as novas versões do opera

    http://pastebin.com/embed_js.php?i=fW09EZv0

    quem quiser uma lista beeeem grande de agents pra ir adaptando no script segue abaixo

    http://techpatterns.com/downloads/firefox/useragentswitcher.xml

  • Responder victor hugo

    30 de maio de 2014, 21:35

    Perfeito amigo !! Código 100% funcional. me ajudou muito !!

  • Responder Cristiano

    8 de fevereiro de 2015, 23:37

    Deu uma melhorada no seu código:

    $useragent = $_SERVER[‘HTTP_USER_AGENT’];// CHECANDO O NAVEGADOR UTILIZADO

    if (preg_match(‘|MSIE ([0-9].[0-9]{1,2})|’,$useragent,$matched)) {

    $browser_version=$matched[1];

    $browser = ‘IE’;

    } elseif(preg_match(‘|Firefox/([0-9.]+)|’,$useragent,$matched)) {

    $browser_version=$matched[1];

    $browser = ‘Firefox’;

    } elseif(substr($useragent, 0, 5) == “Opera”) {

    $posicao_inicial = strpos($useragent, “Version”) + strlen(“Version”);

    $versao = substr($useragent, $posicao_inicial, 5);

    $browser_version = $versao;

    $browser = ‘Opera’;

    } elseif(strrpos($useragent, ‘OPR’)) {

    $posicao_inicial = strpos($useragent, ‘OPR’) + strlen(‘OPR’);

    $browser_version= substr($useragent, $posicao_inicial, 5);

    $browser = ‘Opera’;

    } elseif(preg_match(‘|Chrome/([0-9.]+)|’,$useragent,$matched)) {

    $browser_version=$matched[1];

    $browser = ‘Chrome’;

    } elseif(preg_match(‘|Safari/([0-9.]+)|’,$useragent,$matched)) {

    $browser_version=$matched[1];

    $browser = ‘Safari’;

    } elseif(strrpos($useragent, ‘rv’)) {

    $posicao_inicial = strpos($useragent, ‘rv’) + strlen(‘rv’);

    $browser_version= substr($useragent, $posicao_inicial, 5);

    $browser = ‘IE’;

    } else {

    $browser_version = “”;

    $browser= ‘Desconhecido’;

    }

    $navegador = $browser.”_”.$browser_version;

Escreva um comentário