Nueva pregunta

Pregunta:

Fecha: 09-10-2018 17:38:27 (En Español)

Obtener datos del visitante [No resuelta]

Hola amigos una consulta me gustaría saber como puedo obtener los datos del visitante por medio de php

Ando en busca de recolectar estos datos.
ip
país
dispositivo
navegador

Les agradezco mucho la ayuda
Etiquetas: Navegador Web (Web Browser) - PHP - Pregunta Votos: 0 - Respuestas: 4 - Vistas: 18 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 10-10-2018 13:27:14 Yo utilizo varios metodos para ello, para la IP utilizo esta funcion:

    
    function IPreal() {
    		$ip =  "";
    		
    		if (!empty($_SERVER['HTTP_CLIENT_IP'])){
    	        $ip = $_SERVER['HTTP_CLIENT_IP'];
    		}else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    			$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    		}else{
    			$ip = $_SERVER['REMOTE_ADDR'];
    		}
    
    		$e = ($ip !="") ? explode(".",$ip) : ['0'];
    
    		$valid = ['0','10','172','192','169','127'];
    
    		return (!in_array($e[0],$valid)) ? $ip : '186.185.186.227';
    	}
    
    


    alli cargo una ip por defecto si detecto el acceso de modo local, esto es mientras desarrollo

    Para obtener los datos de dicha IP utilizo la base de datos de GeoLite con la siguiente funcion:

    
    function city($X=null){
    		$ip = ($X==null) ? $this->IPreal() : $X;
    		$reader = new Reader($_SERVER['DOCUMENT_ROOT'].'/application/libraries/GeoLite2-City.mmdb');
    		
    		try{
    			$data = $reader->city($ip);
    			
    			$out = (object) array(
    				'isoCode'   => $data->country->isoCode,
    				'nombre'    => $data->country->name,
    				'estado'    => $data->mostSpecificSubdivision->name,
    				'isoEstado' => $data->mostSpecificSubdivision->isoCode,
    				'ciudad'    => $data->city->name,
    				'postal'    => $data->postal->code,
    				'latitud'   => $data->location->latitude,
    				'longitud'  => $data->location->longitude,
    				'timezone'  => $data->location->timeZone,
    			);
    			return $out;
    		}catch(Exception $e){
    			return $e->getMessage();
    		}
        }
    
    


    Esa función retorna la información asociada a dicha IP aqui mas info sobre ellos: GeoLIte

    Y para los dispositivos utilizo esta funcion:

    function dispositivo(){
    
    			$tablet_browser = 0;
    			$mobile_browser = 0;
    			$body_class     = 'desktop';
    
    			if (preg_match('/(tablet|ipad|playbook)|(android(?!.*(mobi|opera mini)))/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
    			    $tablet_browser++;
    			    $body_class = "tablet";
    			}
    
    			if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android|iemobile)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
    			    $mobile_browser++;
    			    $body_class = "mobile";
    			}
    
    			if ((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
    			    $mobile_browser++;
    			    $body_class = "mobile";
    			}
    
    			$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
    			$mobile_agents = array(
    			    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    			    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    			    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    			    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    			    'newt','noki','palm','pana','pant','phil','play','port','prox',
    			    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    			    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    			    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    			    'wapr','webc','winw','winw','xda ','xda-');
    
    			if (in_array($mobile_ua,$mobile_agents)) {
    			    $mobile_browser++;
    			}
    
    			if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'opera mini') > 0) {
    			    $mobile_browser++;
    			    //Check for tablets on opera mini alternative headers
    			    $stock_ua = strtolower(isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA'])?$_SERVER['HTTP_X_OPERAMINI_PHONE_UA']:(isset($_SERVER['HTTP_DEVICE_STOCK_UA'])?$_SERVER['HTTP_DEVICE_STOCK_UA']:''));
    			    if (preg_match('/(tablet|ipad|playbook)|(android(?!.*mobile))/i', $stock_ua)) {
    			      $tablet_browser++;
    			    }
    			}
    			if ($tablet_browser > 0) {
    			// Si es tablet has lo que necesites
    			   //print 'es tablet';
    			   return 'Tablet';
    			}
    			else if ($mobile_browser > 0) {
    			// Si es dispositivo mobil has lo que necesites
    			   //print 'es un mobil';
    			   return 'Smartphone';
    			}
    			else {
    			// Si es ordenador de escritorio has lo que necesites
    			   //print 'es un ordenador de escritorio'
    			   return 'Ordenador';
    			}
    	}//END
    


    debe haber algo más optimizado pero eso tengo por el momento.

    Saludos
      Votos: 3 - Link respuesta
     
  • Fecha: 10-10-2018 19:07:21 Oh madre santa jajaja tengo que ver bien ese codigo de momento creo que distes justo en el blanco :)   Votos: 0 - Link respuesta
     
  • Fecha: 14-10-2018 04:15:18 Yo utilizo esto para obtener la IP:
    <?php
    
    // Obtiene la IP del usuario
    // Uso: $ip = getip();
    
    function validip($ip) {
    
        if (!empty($ip) && ip2long($ip) != -1) {
    
            $reserved_ips = array(
                array('0.0.0.0', '2.255.255.255'),
                array('10.0.0.0', '10.255.255.255'),
                array('127.0.0.0', '127.255.255.255'),
                array('169.254.0.0', '169.254.255.255'),
                array('172.16.0.0', '172.31.255.255'),
                array('192.0.2.0', '192.0.2.255'),
                array('192.168.0.0', '192.168.255.255'),
                array('255.255.255.0', '255.255.255.255')
            );
    
    
            foreach ($reserved_ips as $r) {
                $min = ip2long($r[0]);
                $max = ip2long($r[1]);
                if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) {
                    return false;
                }
            }
    
            return true;
        } else {
            return false;
        }
    }
    
    function getip() {
    
        if (validip($_SERVER["HTTP_CLIENT_IP"])) {
            return $_SERVER["HTTP_CLIENT_IP"];
        }
    
        foreach (explode(",", $_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) {
            if (validip(trim($ip))) {
                return $ip;
            }
        }
    
        if (validip($_SERVER["HTTP_X_FORWARDED"])) {
            return $_SERVER["HTTP_X_FORWARDED"];
        } elseif (validip($_SERVER["HTTP_FORWARDED_FOR"])) {
            return $_SERVER["HTTP_FORWARDED_FOR"];
        } elseif (validip($_SERVER["HTTP_FORWARDED"])) {
            return $_SERVER["HTTP_FORWARDED"];
        } elseif (validip($_SERVER["HTTP_X_FORWARDED"])) {
            return $_SERVER["HTTP_X_FORWARDED"];
        } else {
            return $_SERVER["REMOTE_ADDR"];
        }
    }
    ?>
    


    Y en tu código, de esta manera:

    $ip = getip();
    
      Votos: 0 - Link respuesta
     
  • Fecha: 14-10-2018 21:59:13 te recomendaria utilizar alguna libreria de geo localizacion, en packagist encontraras muchas gratuitas
    la implementacion en tu proyecto dependera del framework o metodo de dersarrollo que utilices en tu aplicacion, saludos.
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com