Você está aqui: Home » Tutoriais » PHP » Como identificar o navegador utilizado em PHP

Como identificar o navegador utilizado em PHP

PHPOlá!

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.

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.

<?php
  echo($_SERVER['HTTP_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:

<?php
  $useragent = $_SERVER['HTTP_USER_AGENT'];
 
  if (preg_match('|MSIE ([0-9].[0-9]{1,2})|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'IE';
  } elseif (preg_match( '|Opera/([0-9].[0-9]{1,2})|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'Opera';
  } elseif(preg_match('|Firefox/([0-9\.]+)|',$useragent,$matched)) {
    $browser_version=$matched[1];
    $browser = 'Firefox';
  } 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';
  } else {
    // browser not recognized!
    $browser_version = 0;
    $browser= 'other';
  }
  print "browser: $browser $browser_version";
?>

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/

Sobre o autor

https://plus.google.com/u/0/112350387667997071254

Mineiro, belo-horizontino e orgulhoso co-fundador da Verticis Web Studio e do RockBee. Fã de cinema, boa música e de uma cervejinha com os amigos.

Número de posts : 10
  • http://Website Tiago

    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
    ;-)

  • http://www.temmaistudo.com Adriano Ricardo Alves Nunes

    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.

  • http://www.verticis.com.br João Paulo Zica

    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 “<pre>”, adiciono o atributo lang=”php”, ficando <pre 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

  • http://Website Claudio

    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.

  • http://www.verticis.com.br João Paulo Zica

    Claudio,

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

    Obrigado por compartilhar resolução conosco!

    Abraços!

  • http://www.temmaistudo.com Adriano Ricardo

    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.

  • http://www.jovemclub.com victor

    aaaaaah que show
    adorei esse site
    perfeito ;

  • http://gtecinformatica.net/blog/ Thiago Henrique

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

  • Fernando Moreira

    Cara isso me quebrou um ganho heim! Valew!

  • Thiago Toledo Thiago Toledo

    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.

     

  • Jesus

    Obrigado cara. Muito bacana o seu codigo.

  • Mauricio Llatorre

    obrigado :)

  • Flamaury

    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

  • Xd

    asasasasas

  • Willian Mendes

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

  • Kennedy

    Basta utilizar um header().

  • Rodrigo

    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?