Question:
Date: 09-10-2018 17:38:27
(In Spanish)
Ando en busca de recolectar estos datos.
ip
país
dispositivo
navegador
Les agradezco mucho la ayuda Votes: 0 - Answers: 4 - Views: 18 Share on: Google Facebook Twitter LinkedIn Link
Obtener datos del visitante [Unresolved]
Hola amigos una consulta me gustaría saber como puedo obtener los datos del visitante por medio de phpAndo en busca de recolectar estos datos.
ip
país
dispositivo
navegador
Les agradezco mucho la ayuda Votes: 0 - Answers: 4 - Views: 18 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
Date: 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 Votes: 3 - Link answer -
Date: 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 :) Votes: 0 - Link answer
-
Date: 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();
Votes: 0 - Link answer -
Date: 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. Votes: 1 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In