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 daemon
      Estou com uma dúvida,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, porém gostara de mostrar a imagem que esta na pagina do link.
       
      É possível eu colocar na minha index o url, e aparecer uma preview da imagem que esta no link ? 
       
      Igual o google: https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGx1YlY4U0JYQjBMVUpTR2dKQ1VpZ0FQAQ?hl=pt-BR&amp;gl=BR&amp;ceid=BR%3Apt-419
       
      No caso eu importo o tópico e descrição, porém não consigo deixar essa imagem na pagina principal.
    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida:
      Como consigo fazer uma rotina no sistema onde possa fazer de forma automática trazer o resultado de entrada de produtos a cada 3 meses, por exemplo:

      Produtos --- Entrada ---  Meses
      Prod_A -------- 100 ------ 01/2024
      Prod_A -------- 120 ------ 03/2024
      Prod_A -------- 105 ------ 04/2024
      =========================
      Prod_B -------- 105 ------ 02/2024
      Prod_B -------- 120 ------ 03/2024
      Prod_B -------- 130 ------ 04/2024
      =========================
      ETC
       
      Como consigo mostrar para o usuário esse movimento de entrada a cada 3 meses ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Peço desculpa em recorrer a ajuda dos amigos, pois está sendo um mistério para mim, configurar o meu sistema para Impressão de XML e NFe.

      Quando acrescento as linhas no início do Controller:
      use NFePHP\NFe\Make;
      use NFePHP\NFe\Tools;
      use NFePHP\NFe\Danfe;
      etc, etc.
       
       e chamo a libraries assim em alguma função:  $nfe = new Make(); e etc. <== o sistema acusa que não consegue achar 
       
      fiz as alterações necessárias no autoload
      /* |-------------------------------------------------------------------------- | Composer auto-loading |-------------------------------------------------------------------------- | | Enabling this setting will tell CodeIgniter to look for a Composer | package auto-loader script in application/vendor/autoload.php. | | $config['composer_autoload'] = TRUE; | | Or if you have your vendor/ directory located somewhere else, you | can opt to set a specific path as well: | | $config['composer_autoload'] = '/path/to/vendor/autoload.php'; | | For more information about Composer, please visit http://getcomposer.org/ | | Note: This will NOT disable or override the CodeIgniter-specific | autoloading (application/config/autoload.php) */ $config['composer_autoload'] = './vendor/autoload.php';  
      o meu composer.json está assim:
      { "description": "The CodeIgniter framework", "name": "codeigniter/framework", "type": "project", "homepage": "https://codeigniter.com", "license": "MIT", "support": { "forum": "http://forum.codeigniter.com/", "wiki": "https://github.com/bcit-ci/CodeIgniter/wiki", "irc": "irc://irc.freenode.net/codeigniter", "source": "https://github.com/bcit-ci/CodeIgniter" }, "require": { "php": ">=5.3.7", "mpdf/mpdf": "^7.1", "nfephp-org/sped-nfe": "^5.0", "nfephp-org/sped-da": "^1.0" }, "suggest": { "paragonie/random_compat": "Provides better randomness in PHP 5.x" }, "autoload": { "psr-4": { "Libraries\\": "application/libraries" } } }  
      após instalar a NFePhp através do composer, o caminho da pasta NFePhp está assim:
      nome_do_meu_sistema
      |____ application
      |______vendor
      |________nfephp-org
      |__________sped-common
      |__________sped-da
      |__________sped-gtin
      |__________sped-nfe

      Como consigo trazer os comando/libraries da NFe para poder utilizar no projeto.
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida e não estou conseguindo resolver.
       
      Tenho uma tabela onde o usuário lança a Entrada de Produtos <=== até aqui tudo bem.

      O problema que estou encontrando é: 
      - após lançar os itens e se por alguma necessidade precisar fazer devolução, gostaria de alterar o STATUS do lançamento do PRODUTO de 1 para 2, ou seja:
       
      lançou:
      101 - Caneta ------- 10 x 1.50 = 15,00 status = 1
      102 - Lápis --------- 10 x 1.50 = 15,00 status = 1
      103 - Borracha ---- 10 x 1.50 = 15,00 status = 1
      104 - Apontador - 10 x 1.50 = 15,00 status = 1
       
      Se precisar DEVOLVER os itens 102 e 103 o Status de 1 passa para 2, ou seja:
      101 - Caneta ------- 10 x 1.50 = 15,00 status = 1
      102 - Lápis --------- 10 x 1.50 = 15,00 status = 2
      103 - Borracha ---- 10 x 1.50 = 15,00 status = 2
      104 - Apontador - 10 x 1.50 = 15,00 status = 1
       
      Obs.: como consigo filtrar o CódigoProduto + NúmeroLançamento, para não ocorrer o erro de alterar todos.
       
      O problema que estou enfrentando, quando dou o Comando para Alterar, o Sistema Altera todos os produtos lançados que estiver na base de dados, ou seja, onde tiver 102 e 103, o sistema altera.
       
      o meu código:
      CONTROLLER
      /*Salva o Detalhe do Lançamento*/ protected function save_detalhe($prods,$qtde,$vlrunit,$vlrtotal,$notaLct,$numlcto,$codslct){ for ($i=0; $i < count($prods); $i++) { $data = array( 'cod_prod' => $prods[$i], 'qtd_prod' => $qtde[$i], 'vlr_unit' => $vlrunit[$i], 'vlr_total' => $vlrtotal[$i], 'status' => 2, 'devitens' => 2, 'n_nf' => $notaLct, 'lancamentos_idlcto'=> $numlcto, ); //Função para Salvar os Detalhes do lançamento $this->devolucao_model->save_detalhe($data); //Função para Atualizar a Quantidade de Produto no Estoque $this->update_produto($prods[$i],$qtde[$i],$vlrunit[$i],$vlrtotal[$i]); //Função para Alterar Devolução do Item $this->upd_itens($prods[$i],$notaLct[$i],$codslct[$i]); } } /*<=== até aqui tudo certo, como deve ser feito*/ /* * O Problema está aqui * para não ocorrer duplicidade de Lançamento, * o sistema altera o Status do 1º. lançamento */ protected function upd_itens($idprds,$notaLct,$codslct){ $data = array( 'devitens' => 2, ); $this->devolucao_model->update_itens($idprds,$data); }  
      MODEL:
      //Altera o Campo Devolução do Item Lançado //Altera todos os código de produto que encontrar public function update_itens($idprds,$data){ $this->db->where("cod_prod",$idprds); return $this->db->update("lctos_itens",$data); }  
      Grato,
       
      Cesar






       
       
       
       
       
       
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida e não consigo entender, fiz várias pesquisas e tentativas antes de recorrer aos amigos.

      Tenho uma CLASS e quando chamo dentro de um CONTROLLER o sistema acusa que não acha o caminho da CLASS.
      Como consigo fazer para o sistema localizar/chamar a CLASS dentro do Controller ?

      a classe está assim:
       
      <?php namespace Servicos; use NFePHP\NFe\Make; use NFePHP\NFe\Tools; error_reporting(E_ALL); ini_set('display_errors', 'On'); class NFeServicos{ public function __construct($config, $empresas){ //codes... } }  
      Controller:
       
      <?php defined('BASEPATH') OR exit('No direct script access allowed'); use NFePHP\Common\Certificate; use NFePHP\DA\NFe\Danfe; use Servicos\NFeServico; //chamo a class class NotaFiscal extends CI_Controller { public function gerarXml() { $id = $this->input->post('idLct'); $this->load->model('estoque/lancamentos_model', '', true); $venda = $this->lancamentos_model->getById($id); $nfe = new NFeServico(); //<o erro acontece aqui, não localiza. } }  
       
      Grato,
       
      Cesar
×

Informação importante

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