Ir para conteúdo
peterstefan

tratar o HTTP_USER_AGENT no php

Recommended Posts

Olá, estou capturando o http_user_agent do usuario, mais ele ta vindo com tudo esse nome ai.. tem alguma forma de trazer somente chrome, mozilla e assm por diante..? alguém tem alguma dica ai que eu possa seguir de base... obrigado!

HTTP_USER_AGENT

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso não tenha entendido, vou dar um exemplo.

Obs: não sou bom com explode e tenho certeza que essa não é a alternativa mais segura de identificar um navegador.

 

<?php

$nav1 = $_SERVER['HTTP_USER_AGENT'];
$nav2 = explode(")", $nav1);
$nav3 = explode ("/", $nav2[2]);

echo $nav3[0];

?>

 

Obs: isso é apenas uma demonstração de uma gambiarra que poderia fazer.

Lembrando que pode causar o corrompimento do script em alguns navegadores porque os caracteres mudam de acordo com o windows, navegador, versão e etc.

Não aconselho em hipótese alguma você usar esse método HTTP_USER_AGENT.

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, peterstefan disse:

Olá, estou capturando o http_user_agent do usuario, mais ele ta vindo com tudo esse nome ai

 

Sim só irá retornar esses dados, pois são os dados da máquina que acessou o servidor, para um filtro você deve usar essa informação para buscar o que realmente deseja.

 

Para simplificar eu criei essa classe já há algum tempo que pode usar para obter a informação que deseja:

 

Classe UserAgent.php

Citar

Cuidado ao dar Ctrl+C & Ctrl+V

O fórum aqui usa jquey para reescrever dados em JSON o que buga alguns tipos de caracteres não imprimíveis.

Caso copie e cole use um editor que é capaz de interpretar caracteres não legíveis para apagar-los antes de salvar o arquivo.

<?php
/**
 * ****************************************************
 * @Copyright (c) 2017, Spell Master.
 * @version 1.2 : 2018 Spell Master
 * ****************************************************
 * @Class: Retorna dados na máquina que está acessamdo
 *         o servidor.
 * ****************************************************
 * @log v1.2 : Adicionado método para obter o IP da 
 *             máquina.
 * ****************************************************
 **/

class UserAgent {

    private $userData;
    private $userIP;
    private $setOS;
    private $setBrowser;
    private $osTrue = null;
    private $browserTrue = null;

    /** ************************************************
     * @Method: Define os dados e chama os métodos.
     * *************************************************/
    function __construct() {
        $filterServe = filter_input_array(INPUT_SERVER, FILTER_DEFAULT);
        $filterIp = filter_input_array(INPUT_SERVER, FILTER_VALIDATE_IP);
        $this->userData = $filterServe['HTTP_USER_AGENT'];
        $this->userIP = $filterIp['REMOTE_ADDR'];
        $this->checkOs();
        $this->checkBrowser();
    }

    /** ************************************************
     * @Method: Verifica o sistema operacional.
     * *************************************************/
    private function checkOs() {
        $os = ['/windows nt 10/i' => 'Windows 10', '/windows nt 6.3/i' => 'Windows 8.1', '/windows nt 6.2/i' => 'Windows 8', '/windows nt 6.1/i' => 'Windows 7', '/windows nt 6.0/i' => 'Windows Vista', '/windows nt 5.2/i' => 'Windows Server 2003/XP x64', '/windows nt 5.1/i' => 'Windows XP', '/windows xp/i' => 'Windows XP', '/windows nt 5.0/i' => 'Windows 2000', '/windows me/i' => 'Windows ME', '/win98/i' => 'Windows 98', '/win95/i' => 'Windows 95', '/win16/i' => 'Windows 3.11', '/macintosh|mac os x/i' => 'Mac OS X', '/mac_powerpc/i' => 'Mac OS 9', '/linux/i' => 'Linux', '/ubuntu/i' => 'Ubuntu', '/iphone/i' => 'iPhone', '/ipod/i' => 'iPod', '/ipad/i' => 'iPad', '/android/i' => 'Android', '/blackberry/i' => 'BlackBerry', '/webos/i' => 'Mobile'];
        foreach ($os as  $reg => $value) {
            if (preg_match($reg, $this->userData)) {
                $this->setOS = (string) $value;
                $this->osTrue = true;
            }
        }
    }

    /** ************************************************
     * @Method: Verifica o navegador.
     * *************************************************/
    private function checkBrowser() {
        $browser = ['/msie/i' => 'Internet Explorer', '/firefox/i' => 'Firefox', '/safari/i' => 'Safari', '/chrome/i' => 'Chrome', '/edge/i' => 'Edge', '/opera/i' => 'Opera', '/netscape/i' => 'Netscape', '/maxthon/i' => 'Maxthon', '/konqueror/i' => 'Konqueror', '/mobile/i' => 'Handheld Browser'];
        foreach ($browser as $reg => $value) {
            if (preg_match($reg, $this->userData)) {
                $this->setBrowser = (string) $value;
                $this->browserTrue = true;
            }
        }
    }

    /** ************************************************
     * @Method: Retorna os dados da máquina que está
     * acessando.
     * *************************************************/
    public function getUserMachine() {
        return $this->userData;
    }

    /** ************************************************
     * @Method: Retorna o sistema operacional da máquina
     * que está acessando.
     * *************************************************/
    public function getOs() {
        if (isset($this->osTrue)) {
            return $this->setOS;
        } else {
            return " ";
        }
    }

    /** ************************************************
     * @Method: Retorna o navegador da máquina que está
     * acessando.
     * *************************************************/
    public function getBrowser() {
        if (isset($this->browserTrue)) {
            return $this->setBrowser;
        } else {
            return " ";
        }
    }

    /** ************************************************
     * @Method: Obtem o endereço de IP da máquina que
     * está acessando.
     * *************************************************/
    public function requestIP() {
        return $this->userIP;
    }
}

 

Usando:

<?php
require_once('UserAgent.php');
$ua = new UserAgent();

echo("<p>O IP que acessou o servidor é: {$ua->requestIP()}</p>";
     . "<p>O Sistema operacional que acessou o servidor é: {$ua->getOs()}</p>";
     . "<p>O navegador que acessou o servidor é: {$ua->getBrowser()}</p>";
     . "<hr />";
     . "<p>Todos dados da máquina: {$ua->getUserMachine()}</p>");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Apenas uma pequena dúvida.
       
      Precisei realizar uma alteração de Validação de usuário/empresa.
       
      Antes essa linha de código estava assim:
      <input type="hidden" id="idEmps" name="idEmps" value="<?php echo $emprsa->idEmpresas; ?>" />  
      Precisei colocar [0] para poder localizar a Empresa Logada.
      <input type="hidden" id="idEmps" name="idEmps" value="<?php echo $emprsa[0]->idEmpresas; ?>" />  
      Agora, o sistema dá erro e não grava.
       
      minha dúvida: qual a função do [0]  e  como consigo corrigir ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, antes de recorrer a ajuda dos amigos, tentei de vários formas mas não consegui sucesso.
       
      Preciso criar uma Rotina com Acesso de Login parecido com o do Site Google.
       
      Tenho uma rotina que faz as Verificação do Usuário e Senha correto, mas após a verificação do Usuário/Senha, gostaria de ser redirecionado para uma Rotina onde possa Selecionar as Empresas vinculada/permissão para cada usuário, ou seja:
      o usuário 1 tem permissão para: Empresa 1 | Empresa 2
      o usuário 2 tem permissão para: Empresa 2
       
      Abaixo, posto o código que faço a verificação de Usuário/Senha.
      <!-- Código da VIEW --> <form class="form-vertical" id="formLogin" method="post" action="<?php echo base_url()?>index.php/admin/controle/verificarLogin"> <?php if ($this->session->flashdata('error') != null) {?> <div class="alert alert-danger"> <button type="button" class="close" data-dismiss="alert">×</button> <?php echo $this->session->flashdata('error');?> </div> <?php } ?> <div class="form-group"> <input type="text" id="email" name="email" class="form-control" placeholder="Email"> </div> <div class="form-group"> <input type="password" id="senha" name="senha" class="form-control" placeholder="Password"> </div> <div class="row"> <div class="col-6"> <a href="<?php echo base_url() ?>" class="btn btn-danger btn-block btn-flat"><i class="fa fa-undo"></i> Voltar ao Site</a> </div> <div class="col-6"> <button type="submit" class="btn btn-primary btn-block btn-flat pull-right">Acessar</button> </div> <!-- /.col --> </div> <div class="login-recup"> Esqueceu sua senha: <a href="<?php echo base_url()?>admin/controle/recupera"> clique aqui</a>. </div> </form>  
      //Código no Controller public function index() { if ((!session_id()) || (!$this->session->userdata('logado'))) { redirect('admin/controle/login'); } $this->load->view('estilo/header', $this->data); $this->load->view('admin/tema/topo'); $this->load->view('admin/tema/conteudo'); $this->load->view('estilo/footer'); } public function login() { $this->load->view('admin/controle/login'); } public function verificarLogin() { header('Access-Control-Allow-Origin: '.base_url()); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Content-Type'); $this->load->library('form_validation'); $this->form_validation->set_rules('email', 'E-mail', 'valid_email|required|trim'); $this->form_validation->set_rules('senha', 'Senha', 'required|trim'); if ($this->form_validation->run() == false) { $json = array('result' => false, 'message' => validation_errors()); echo json_encode($json); } else { $email = $this->input->post('email'); $password = $this->input->post('senha'); $this->load->model('Admin/Controle_model'); $user = $this->Controle_model->check_credentials($email); if ($user) { if (password_verify($password, $user->senha)) { $session_data = array('nome' => $user->nome_user, 'email' => $user->email, 'id' => $user->idUsuarios, 'permissao' => $user->permissoes_idPermissao, 'logado' => true); $this->session->set_userdata($session_data); $json = array('result' => true); echo json_encode($json); //$this->envia(); } else { $json = array('result' => false, 'message' => 'Os dados de acesso estão incorretos.'); echo json_encode($json); } } else { $json = array('result' => false, 'message' => 'Usuário não encontrado, verifique se informou os dados corretamente.'); echo json_encode($json); } } die(); }  
      Como faço o redirecionamento para selecionar a Empresa Vinculada, antes de acessar o Sistema ?
       
      Grato,
       
      Cesar
       
       
    • Por violin101
      Pessoal, saudações.
       
      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas infelizmente estou com uma dúvida e não estou conseguindo resolver.
       
      Preciso de ajuda, para criar uma rotina onde o sistema possa Gerar/Calcular vencimentos com períodos variados, ou seja:
      00/30/60/90
      28/42/56
      etc
       
      Como faço para o Sistema entender que os PERÍODOS VARIADOS, seja a quantidade de parcelas e vencimentos ?
       
      Observação: peço desculpa se postei minha dúvida na postagem errada.
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de como devo fazer.
       
      Preciso criar uma Rotina para Cadastrar Faturamento, por exemplo:
      1) 28/42/56 dias -> de 28 p/ 42 a dif. é de 14 dias...
      2) 30/60/90 dias -> de 30 p/ 60 a dif. é de 30 dias...
      3) 0/15/30/45 dias  -> de 0 p/ 15 a dif. é de 15 dias...
       
      Como devo fazer para  cadastrar os prazo de vencimento, onde o sistema possa contar as diferenças entre os dias ?
       
      Grato,
       
      Cesar
    • Por Giovanird
      O script abaixo atualiza a página (centro.php) a cada um minuto e dentro desta página terei uma div que não poderá ser atualizada.
      Tentei colocar esta div como pagina com setInterval de 100 minutos porem ao dar o refresh no centro.php  tudo vai junto.  Será que isto é possivel?

      Desde já meu muito obrigado!
      <script> function atualiza(){ var url = 'centro.php'; $.get(url, function(dataReturn) { $('#centro').html(dataReturn); }); } setInterval("atualiza()",60000); </script>  

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.