Recentemente, comecei a me perguntar sobre sites como http://thismachine.info/, que obtêm informações do sistema operacional do usuário. Não consegui descobrir como fazer isso com PHP e queria tentar descobrir.
Notei que eles listam o user-agent
, o que fornece muitas informações sobre o navegador. Eles obtêm as informações do sistema operacional a partir disso ou de outra coisa? Existe uma API que eu possa usar para obter o sistema operacional do usuário?
Vejo como eles conseguiram o navegador e o IP, mas não conseguiram descobrir a parte do sistema operacional!
php
operating-system
user-agent
Pattyd
fonte
fonte
echo $_SERVER['HTTP_USER_AGENT'];
vai mostrar (em certa medida) o sistema operacional do usuário. Para mim, ele detectouMozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0
onde estou de fato usando o Windows XP, então não é uma ciência exata.http://thismachine.info/
sabe que estou usando o Windows XP? Isso eu não sei, no entanto, eles devem estar usando um script que irá localizar e substituir, em seguida, ecoá-lo depois. Até onde sei, não há nada que determine o sistema operacional exato, pois vejo que isso cairia no domínio de títulos.Windows XP
na matriz/windows nt 5.1/i' => 'Windows XP',
Respostas:
O código abaixo pode explicar por si só, como http://thismachine.info/ é capaz de mostrar qual sistema operacional alguém está usando.
O que ele faz é farejar o modelo do seu sistema operacional central, por exemplo,
windows nt 5.1
como o meu.Em seguida, ele passa o Windows NT 5.1 / i para o Windows XP como o sistema operacional.
Usando:
'/windows nt 5.1/i' => 'Windows XP',
de uma matriz.Você poderia dizer adivinhação ou uma aproximação, mas mesmo assim bastante acertada.
Emprestado de uma resposta em SO https://stackoverflow.com/a/15497878/
Notas de rodapé: (19/14 de janeiro) Houve uma edição sugerida em 18 de janeiro de 2014 para adicionar
/msie|trident/i
por YJSoft um novo membro no SO.O comentário foi lido como:
Comentário: porque o ua de msie11 não inclui msie (inclui tridente em vez disso)
Eu pesquisei um pouco e encontrei alguns links explicando a string do Trident.
Embora a edição tenha sido rejeitada (não por mim, mas por alguns dos outros editores), vale a pena ler os links acima e usar seu bom senso.
De acordo com uma pergunta feita sobre a detecção do SUSE, encontrei este trecho de código no seguinte URL:
Código adicional:
Editar: 12 de abril de 2015
Eu percebi uma pergunta ontem que pode ser relevante para esta sessão de perguntas e respostas e pode ser útil para alguns. Em relação a:
Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-GT-I9505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36
Outra edição e adição de um link de referência que foi solicitado (e respondido / aceito hoje, 4/16 de novembro) que pode ser útil.
Consulte o Q&A aqui no Stack:
fonte
'/windows nt 6.3/i'
é para Windows 8.1"mavericks HTTP_USER_AGENT"
@ben_aaron'/cros/i' => 'Chrome OS'
Quando você acessa um site, seu navegador envia uma solicitação ao servidor da web, incluindo muitas informações. Essas informações podem ser parecidas com estas:
Essas informações são usadas pelo servidor da web para determinar como lidar com a solicitação; o idioma preferido e se a compactação é permitida.
No PHP, todas essas informações são armazenadas no
$_SERVER
array. Para ver o que você está enviando para um servidor da web, crie um novo arquivo PHP e imprima tudo do array.Isso lhe dará uma boa representação de tudo que está sendo enviado ao servidor, de onde você pode extrair as informações desejadas, por exemplo,
$_SERVER['HTTP_USER_AGENT']
obter o sistema operacional e o navegador.fonte
Pegou o seguinte código do manual do php para get_browser .
A
$browser
matriz contémplatform
informações que fornecem o sistema operacional específico em uso.Certifique-se de ver a seção "Notas" nessa página. Pode ser algo (thismachine.info) que está usando, se não algo já apontado em outras respostas.
fonte
Com base na resposta de Fred-II, eu queria compartilhar minha opinião sobre a função getOS, ela evita globais, mescla as duas listas e detecta a arquitetura (x32 / x64)
fonte
Se você deseja obter todas essas informações, leia:
http://php.net/manual/en/function.get-browser.php
Você pode executar o código de amostra e verá como funciona:
O exemplo acima produzirá algo semelhante a:
fonte
Se você quiser poucas informações, como uma classe em seu html para navegadores comuns, por exemplo, pode usar:
que irá retornar 'safari' ou 'firefox' ou 'chrome', ou 'ie ie8', 'ie ie9', 'ie ie10', 'ie ie11'.
fonte
Pode procurar esta informação em
$_SERVER['HTTP_USER_AGENT']
, mas o seu formato é livre, o envio não é garantido e pode ser facilmente alterado pelo utilizador, seja por motivos de privacidade ou outros.Se você não definiu a
browsecap
diretiva, isso retornará um aviso. Para ter certeza de que está definido, você pode recuperar o valor usandoini_get
e ver se ele está definido.Como kba explicou em sua resposta, seu navegador envia muitas informações ao servidor enquanto carrega uma página da web. A maioria dos sites usa essas informações do agente do usuário para determinar o sistema operacional do visitante, o navegador e várias informações.
fonte