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
