PHP é à quinta-feira – Obter o SO e Browser dos seus visitantes
Por R. Santos para o Pplware
O user agent é uma sequência de texto que o navegador, a pedido do servidor, costuma enviar através de um HTTP header que permite identificar o browser, o idioma do browser, o sistema operativo, o charset a ser utilizado e mais uma panóplia de coisas.
Estas informações ajudam os websites a determinarem as capacidades dos browsers a serem utilizados pelos visitantes, ajudando também os programadores web a criar páginas que se adaptem a todos os navegadores utilizados.
A função que determina o Sistema Operativo:
function Obter_SO() /** * Windows... */ $sistemas_operativos['win95'] <span> </span> = 'Windows 95'; $sistemas_operativos['windows 95'] <span> </span> = 'Windows 95'; $sistemas_operativos['win98'] <span> </span> = 'Windows 98'; $sistemas_operativos['windows 98'] <span> </span> = 'Windows 98'; $sistemas_operativos['winnt'] = 'Windows NT'; $sistemas_operativos['winnt4.0'] = 'Windows NT 4.0'; $sistemas_operativos['windows nt 4.0'] = 'Windows NT 4.0'; $sistemas_operativos['win 9x 4.90'] = 'Windows Me'; $sistemas_operativos['windows me'] = 'Windows Me'; $sistemas_operativos['windows nt 5.0'] = 'Windows 2000'; $sistemas_operativos['windows nt 5.1'] = 'Windows XP'; $sistemas_operativos['windows nt 5.2'] = 'Windows 2003'; $sistemas_operativos['windows nt 6.0'] = 'Windows Vista'; $sistemas_operativos['windows nt 6.1'] = 'Windows 7'; /** * Linux... */ $sistemas_operativos['linux'] = 'Linux'; $sistemas_operativos['linux i686'] = 'Linux i686'; $sistemas_operativos['linux i586'] = 'Linux i586'; $sistemas_operativos['linux i486'] = 'Linux i486'; $sistemas_operativos['linux i386'] = 'Linux i386'; $sistemas_operativos['linux ppc'] = 'Linux PPC'; /** * Unix... */ $sistemas_operativos['unix'] = 'Unix'; /** * Mac... */ $sistemas_operativos['mac'] = 'Mac'; $sistemas_operativos['Mac OS X'] = 'Mac OS X'; $sistemas_operativos['Mac 10'] = 'Mac OS X'; $sistemas_operativos['Mac OS X 10_4'] = 'Mac OS X Tiger'; $sistemas_operativos['Mac OS X 10_5'] = 'Mac OS X Leopard'; $sistemas_operativos['Mac OS X 10_5_2'] = 'Mac OS X Leopard'; $sistemas_operativos['Mac OS X 10_5_3'] = 'Mac OS X Leopard'; $sistemas_operativos['PowerPC'] = 'Mac PPC'; $sistemas_operativos['PPC'] <span> </span> = 'Mac PPC'; /** * So Móveis... */ $sistemas_operativos['Android'] = 'Android'; $sistemas_operativos['elaine'] = 'Palm'; $sistemas_operativos['palm'] = 'Palm'; $sistemas_operativos['series60'] = 'Symbian S60'; $sistemas_operativos['symbian'] = 'Symbian'; $sistemas_operativos['SymbianOS'] = 'Symbian OS'; $sistemas_operativos['windows ce'] = 'Windows CE'; if (is_array($sistemas_operativos)) { foreach ($sistemas_operativos as $ua => $sistemas_operativo) { if (preg_match("|".preg_quote($ua)."|i", trim($_SERVER['HTTP_USER_AGENT']))) { return $sistemas_operativo; } } } return 'Sistema Operativo Desconhecido'; } |
E a que determina o browser e a versão correspondente.
function Obter_Browser() { /** * Apenas os mais conhecidos... */ $browsers['Chrome'] = 'Chrome'; $browsers['Firebird'] = 'Firebird'; $browsers['Firefox'] = 'Firefox'; $browsers['Internet Explorer'] = 'Internet Explorer'; $browsers['Konqueror'] = 'Konqueror'; $browsers['Lynx'] = 'Lynx'; $browsers['mobilexplorer'] = 'Mobile Explorer'; // Móvel $browsers['Mobile Safari'] = 'Mobile Safari'; // Móvel $browsers['MSIE'] = 'Internet Explorer'; $browsers['Netscape'] = 'Netscape'; $browsers['OmniWeb'] = 'OmniWeb'; $browsers['Opera'] = 'Opera'; $browsers['operamini'] = 'Opera Mini'; // Móvel $browsers['opera mini'] = 'Opera Mini'; // Móvel $browsers['Phoenix'] = 'Phoenix'; $browsers['Safari'] = 'Safari'; if (is_array($browsers)) { foreach ($browsers as $ua => $browser) { if (preg_match("|".preg_quote($ua).".*?([0-9\.]+)|i", trim($_SERVER['HTTP_USER_AGENT']), $versao)) { return $browser.' '.$versao[1]; } } } return 'Browser Desconhecido'; } |
Modo de utilização:
echo Obter_SO().', '.Obter_Browser(); |
Muito simples mas eficaz!
Como de costume, qualquer dúvida e/ou sugestão podem postar nos comentários ou no Fórum Pplware.
Obrigado e boa programação!
Este artigo tem mais de um ano
Hey 🙂
Há alguma maneira de se saber se o utilizador está num local público, como na universidade ou trabalho? (shared IPs/firewall)
Obrigado!
Já escrevi isto no fórum 🙂
Está bom no geral, mas alterava uma coisa; metia o trim fora do foreach.
sim, e acho que também seria boa ideia inicializar o array $sistemas_operativos (pessoalmente, e isto é só uma preferência pessoal, prefiro declarar arrays com array( ‘nome’ => ‘valor’, ‘nome2’ => ‘valor2’))
de resto, não tenho assim mais nada a apontar, está muito bom 😉
Tinha uma sugestao a fazer ao pplware:
Porque nao adicionar essa funcao aqui aos comentarios?
Porque ele vai te dizer a ti o teu browser e o teu S.O, e acho que isso já tu sabes.
O que tu querias era que ele te disse-se o S.O e o Browser dos outros.
O código aqui apresentado tanto pode servir para mostrar aos visitantes, para fins estatísticos, etc.
R. Santos, olá.. semana passada eu havia perguntado sobre a galeria, e vc me passou bons links de referencia.
era aquilo mesmo que eu queria, porém para ficar do jeito que gostaria, preciso fazer alguma implementações como vc mesmo me sugeriu.
Voce poderia me ajudar a fazer essas implementações ?
diante do codigo
http://www.phptoys.com/e107_plugins/content/content.php?content.54.2
preciso que seja feito uma paginação, somente isso.
é possível ?
se vc quiser podemos trocar e-mail para ser mais rápido…
Paginação ?
http://www.phpclasses.org/browse/package/3352.html
Tens aí essa classe, muito fácil de implementar.
Essa função já aqui esteve há algum tempo. Junto ao nome do autor do comentário aparecia o sistema operativo e o browser utilizados pelo mesmo. Acontece que muita gente viu essa funcionalidade como uma invasão de privacidade, vá-se lá saber porquê…
Isso já esteve aqui no Pplware há algum tempo. Junto ao nome do autor do comentário surgia o sistema operativo e o browser utilizados pelo mesmo. Acontece que muita gente viu a nova função como uma invasão de privacidade…
Desde que não mostre o IP do visitante tudo bem. Penso que ninguém tem vergonha do browser ou do sistema operativo que usa.
Please pplware, reactivem essa função.
Boas pessoal!!
Uma questão off topic, não quis criar novo tópico no fórum, porque não acho que valha a pena. Se me pudessem ajudar, agradecia.
O problema é o seguinte: estou a desenvolver um site e quero implementa-lo com Ajax, então o que fiz foi criar um “div id=main” na minha pagina html que se divide em “div id=left”, que contem um menu de links e “div id=right”.
A ideia passa por carregar por exemplo num link e através de Ajax fazer com que a informação apareça no lado direito(e funciona). O senão é que apenas funciona se substituir os links () por botões ().
Alguém tem ideia como fazê-lo com links??
Cumprimentos e bom fim-de-semana.
Criar um tópico no fórum, secção “programação e web”, para te ajudarmos, pois precisamos de saber como é que estás a fazer nos botões, para não conseguires usar em links, porque é perfeitamente possível usar em links.
Boas,
2 pensamentos para o final de semana:
O teu site, terá de funcionar com javascript e sem javascript, caso contrário, se utilizares a técnica do Ajax, prejudicarás quer a indexação de conteúdos pelos motores de busca (Ex. Google, Yahoo, Bing, etc) quer os utilizadores que desligarem a execução de javascript no browser.
Vai pesquisando Jquery (IDE de Js), torna fácil a utilização do Ajax e garante compatibilidade nos browsers.
Qualquer dúvida manda mail ruicosta@inovador.net) ou manda o link do teu post no fórum para o pessoal partilhar.
É bom saber que alguém se preocupa em aprender a programar em vez de simplesmente utilizar o trabalho dos outros.
Obrigado Bruno e Rui pelas vossas respostas.
O tópico no fórum esta criado.
link: http://forum.pplware.com/showthread.php?tid=2912
Por acaso nem pensei em fazer o site sem JavaScript, até porque desconhecia que causava problemas de indexação. Mas está bem visto.
Mto bom, mas meio força bruta esse teu código…
Tu podia usar preg_match pra extrair do user agent o browser, versão e SO…
algo assim serviria
preg_match(“/^(\w+)\/([0-9\.]+) \(([\w ]+ [0-9\.]+);/”,$ua,$matches);
$matches[1] = Browser,
$matches[2] = Versão do Browser,
$matches[3] = SO.
Daí seria só usar $browsers[$matches[1]] pra pegar o nome bonitinho 🙂
Confesso que foi feito à pressa porque esta semana estive um pouco ocupado.
Obrigado pelas sugestões, não há nada melhor que a troca de ideias de diferentes programadores (logo, diferentes formas de programar) num código open-source 🙂
Este script está muito bem conseguido. Parabéns!
A proposito, este post nao está catalogado em PHP… e tem um bug na página porque a letra está tipo [code]...
...vejam isso please... 😛