Pregunta:
Fecha: 12-10-2016 17:39:10
(En Español)
La clase básicamente hace uso de un servicio web provisto por http://www.geoplugin.net, aquí pueden ver los terminos y condiciones de uso: http://www.geoplugin.com/aup
Sin más, aquí el código de la clase "GeoPlugin.class.php":
Aquí un ejemplo de uso "index.php":
Aquí la demo online
Creo que el código se explica por si solo, ante cualquier inconveniente no duden en consultar.
Saludos a todos y buen código! Votos: 5 - Respuestas: 1 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
Obtener nombre y código de país ISO2 de nuestros visitantes con PHP[Resuelta]
Hola a todos, en esta oportunidad quería compartirles una clase que he desarrollado para obtener el nombre y código de país ISO2 de los visitantes de nuestro sistema web.La clase básicamente hace uso de un servicio web provisto por http://www.geoplugin.net, aquí pueden ver los terminos y condiciones de uso: http://www.geoplugin.com/aup
Sin más, aquí el código de la clase "GeoPlugin.class.php":
<?php class GeoPlugin { private $mGeoData = array(); public function __construct($pIPv4 = FALSE) { if($pIPv4 === FALSE){ $pIPv4 = self::getIP(); } $this->mGeoData = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $pIPv4)); } public function getPaisNombre() { if (isset($this->mGeoData['geoplugin_status']) && !empty($this->mGeoData['geoplugin_status']) && $this->mGeoData['geoplugin_status'] = '200') { return $this->mGeoData['geoplugin_countryName']; } else { return FALSE; } } public function getPaisISO2() { if (isset($this->mGeoData['geoplugin_status']) && !empty($this->mGeoData['geoplugin_status']) && $this->mGeoData['geoplugin_status'] = '200') { return $this->mGeoData['geoplugin_countryCode']; } else { return FALSE; } } public static function getPaisISO2ByIP($ip) { $plugin = new GeoPlugin($ip); $iso2 = $plugin->getPaisISO2(); if ($iso2) { return $iso2; } else { return FALSE; } } public static function getIP() { $ip = FALSE; if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_VIA')) { $ip = getenv('HTTP_VIA'); } elseif (getenv('HTTP_USERAGENT_VIA')) { $ip = getenv('HTTP_USERAGENT_VIA'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_X_CLUSTER_CLIENT_IP')) { $ip = getenv('HTTP_X_CLUSTER_CLIENT_IP'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $ip = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $ip = getenv('HTTP_FORWARDED'); } elseif (getenv('HTTP_PROXY_CONNECTION')) { $ip = getenv('HTTP_PROXY_CONNECTION'); } elseif (getenv('HTTP_XPROXY_CONNECTION')) { $ip = getenv('HTTP_XPROXY_CONNECTION'); } elseif (getenv('HTTP_PC_REMOTE_ADDR')) { $ip = getenv('HTTP_PC_REMOTE_ADDR'); } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } }
Aquí un ejemplo de uso "index.php":
<?php require_once 'GeoPlugin.class.php'; ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <?php $geoObj = new GeoPlugin(); echo 'País ISO: ', $geoObj->getPaisISO2(); echo '<br/>'; echo 'País nombre: ', $geoObj->getPaisNombre(); ?> </body> </html>
Aquí la demo online
Creo que el código se explica por si solo, ante cualquier inconveniente no duden en consultar.
Saludos a todos y buen código! Votos: 5 - Respuestas: 1 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 07-03-2017 07:35:30 Fer, muy buen aporte.
Te paso el código un poco diferente corrigiendo un error que tienes en la lógica de las líneas 15 y 23 donde en lugar de hacer una comparación con 200 estás realizando una asignación.
De igual manera removí las sentencias else pues no me gustan y hay quienes las consideran innecesarias jejeje
<?php class GeoPlugin { private $mGeoData = []; public function __construct($pIPv4 = null) { if ($pIPv4 === null) { $pIPv4 = self::getIP(); } $this->mGeoData = self::getData($pIPv4); } public static function getIP() { $ip = $_SERVER['REMOTE_ADDR']; $envVars = [ 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_VIA', 'HTTP_USERAGENT_VIA', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'HTTP_PROXY_CONNECTION', 'HTTP_PC_REMOTE_ADDR', ]; foreach ($envVars as $envVar) { if (getenv($envVar)) { $ip = getenv($envVar); break; } } return $ip; } public static function getData($ip) { return unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $ip)); } public static function getPaisISO2ByIP($ip) { $plugin = new self($ip); $iso2 = $plugin->getPaisISO2(); if (!$iso2) { return false; } return $iso2; } public function getPaisISO2() { if (!isset($this->mGeoData['geoplugin_status']) || empty($this->mGeoData['geoplugin_status']) || $this->mGeoData['geoplugin_status'] !== 200 ) { return false; } return $this->mGeoData['geoplugin_countryCode']; } public function getPaisNombre() { if (!isset($this->mGeoData['geoplugin_status']) || empty($this->mGeoData['geoplugin_status']) || $this->mGeoData['geoplugin_status'] !== 200 ) { return false; } return $this->mGeoData['geoplugin_countryName']; } }
saludos! Votos: 2 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión