Foros del Web » Programando para Internet » PHP »

visualizar info dependiendo de la ip del cliente

Estas en el tema de visualizar info dependiendo de la ip del cliente en el foro de PHP en Foros del Web. .... bueno otra cosita mas para hacer ... como le hago para visualizar datos de una persona registrada en mi web pero dependiendo de la ...
  #1 (permalink)  
Antiguo 11/06/2009, 13:31
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
Pregunta visualizar info dependiendo de la ip del cliente

.... bueno otra cosita mas para hacer ...

como le hago para visualizar datos de una persona registrada en mi web pero dependiendo de la ip del cliente .. ejemplo:

deseo restringir que dicha informacion del cliente sea vista en panama, venezuela, peru ... pero para el resto del planeta si se visualice ..

si alguien tiene alguna idea gracias por la ayuda de antemano ..
__________________
"La vida sigue su curso, tú toma parte de ella."
  #2 (permalink)  
Antiguo 11/06/2009, 13:42
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: visualizar info dependiendo de la ip del cliente

Ya sabes visualizar si el ip viene de Panama o Venezuela o Peru...?
  #3 (permalink)  
Antiguo 11/06/2009, 14:14
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: visualizar info dependiendo de la ip del cliente

se que asi obtengo la ip del cliente

Código PHP:
<html>
<body>
<?
function Saber_IP(){ 
        if(
getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")){ 
                 
$ip getenv("HTTP_CLIENT_IP"); 
        } 
           elseif(
getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){ 
               
$ip getenv("HTTP_X_FORWARDED_FOR"); 
           } 
           elseif(
getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")){ 
               
$ip getenv("REMOTE_ADDR"); 
           } 
           elseif(isset(
$_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){ 

               
$ip $_SERVER['REMOTE_ADDR']; 
           } 
           else { 
               
$ip "Unknown"
           } 
          return 
$ip
    } 

//La forma para usarse es asi: 

$IP Saber_Ip(); 

echo 
"Tu IP es: ".$IP;  
?>
</body>
</html>
__________________
"La vida sigue su curso, tú toma parte de ella."
  #4 (permalink)  
Antiguo 11/06/2009, 14:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: visualizar info dependiendo de la ip del cliente

mmm... con la IP no se puede hacer mucho....

debes usar algún servicio o script de localización Geo-IP, así ya podrías saber de donde viene el IP ...

y así, ya después manejas tu lógica....
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 11/06/2009, 14:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: visualizar info dependiendo de la ip del cliente

No puedes saberlo con IP solamente. Es como te dice pateketrueke. Mira tienes que usar este servicio

http://ip-to-country.webhosting.info/node/view/6

vas a darle un click al link que dice
Download the latest IP-to-Country Database (Last updated on June 03 2009)

Ese archivo lo actualizan una vez cada mes aproximadamente. A veces más tiempo.

Luego usas una funcion que te permite comparar el codigo con el ip de la persona. Te voy a dar el que yo uso pero el unico problema es que tienes que cambiar dos cosas del archivo que bajes de ip-to-country.webhosting.info

1. quitar todas las comillas. Yo te sugiero que uses un programa que es muy bueno para editar se llama Notepad++
2. algunos lugares salen al final con
, U.S.
y debes quitarle la coma a esa parte, lo que tienes que hacer es un replace para que salga solamente
U.S.

Ok este es el codigo que yo uso

Código PHP:
<?php
/**
 * This class generates the country name and its flag from its IP address
 *
 *
 * @author Rochak Chauhan
 */
class CountryFromIP {

    private 
$CountryIPDatabase 'CountryIPDatabase.txt';
    private 
$ip '';

    
/**
     * Function to validate IP ( please modify it according to your needs)
     *
     * @param $ip - string
     *
     * @return boolean
     */
    
public function ValdateIP($ip) {
        
$ipArray explode(',',$ip);

        if(
count($ipArray) != 4) {
            echo 
"<font color='red' size='3'> <b>ERROR: </b> Invalid IP</font>";
            return 
false;
        }
        else {
            return 
true;
        }
    }

    
/**
     * Function to return Country name from the IPDatabase
     *
     * @param $ip string
     * 
     * @return string - name of the country, false otherwise
     */
    
public function GetCountryName($ip) {
        
$this->ip $ip;
        
$ip sprintf("%u"ip2long($ip));

        
$csvArray file($this->CountryIPDatabase);

        for(
$i=0$i<count($csvArray); $i++) {
            
$arrayOfLine explode(','$csvArray[$i]);
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) {
                return 
$countryName $arrayOfLine[4];
            }
        }
        return 
false;
    }

    
/**
     *  Function to return local path to Country's flag
     *
     * @param $ip - string
     *
     * @return string - local path to flag image
     */
    
public function ReturnFlagPath() {

        if(
$countryName trim(ucwords(strtolower($this->GetCountryName($this->ip))) )) {
                        
$countryName str_replace(' ','%20',$countryName);
            return 
"flag/$countryName.gif";
        }
        else {
            return 
false;
        }
    }

}

$ip $_SERVER["REMOTE_ADDR"];

$object = new CountryFromIP();

$countryName =  $object->GetCountryName($ip);
$flagPath =  $object->ReturnFlagPath();
/*
echo "<BR> <B>Country: </B>".$countryName;
echo "<BR> <B>Flag: </B> <img src=".$flagPath." border='0'>";
*/
?>
Aqui vas a indicar donde se encuentra el archivo que bajaste yo le cambie el nombre a esto
private $CountryIPDatabase = 'CountryIPDatabase.txt';
pero puedes dejarle el nombre como sale originalmente, y con la extension .csv.

Lo unico que tienes que hacer para saber de que pais viene es escribir
echo $countryName;

Para que te funcione $flagPath tendrias que bajar todas las banderas y aqui estan
http://www.geocities.com/rochakchauhan/flag.zip

Me dejas saber

Última edición por abimaelrc; 11/06/2009 a las 14:50
  #6 (permalink)  
Antiguo 11/06/2009, 14:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: visualizar info dependiendo de la ip del cliente

abimaelrc, lastima que ya no te puedo dar mas karma... buen trabajo!!

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/06/2009, 14:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: visualizar info dependiendo de la ip del cliente

En efecto, te recomendaría abimaelrc que pusieras esto como un aporte solo .

Saludos.
  #8 (permalink)  
Antiguo 11/06/2009, 14:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: visualizar info dependiendo de la ip del cliente

Ya esta creado gracias por la sugerencia

Última edición por abimaelrc; 11/06/2009 a las 15:25
  #9 (permalink)  
Antiguo 11/06/2009, 15:35
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
De acuerdo Respuesta: visualizar info dependiendo de la ip del cliente

abimaelrc muchisimas gracias .. .. revisare

__________________
"La vida sigue su curso, tú toma parte de ella."
  #10 (permalink)  
Antiguo 07/07/2009, 14:14
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
Pregunta Respuesta: visualizar info dependiendo de la ip del cliente

abimaelrc --- de ante mano gracias .. por el dato ..

sabes hice todo el precedimiento que me sugeristes .. y adite el archivo ip_country.php quitando las comas y demas ..

al subir los archivos en modo de prueba al servidor .. sale el siguiente error


Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/content/a/m/p/ampalacios/html/geoip/ip_country.php on line 12


que sera ???
__________________
"La vida sigue su curso, tú toma parte de ella."
  #11 (permalink)  
Antiguo 07/07/2009, 14:49
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
Pregunta Respuesta: visualizar info dependiendo de la ip del cliente

hola amigos del foro .. creo que el error se debe a que mi servidor no acepta php orientado a objetos ..

lo pase ha estructurado .. pero no arroja ningun dato .. le faltara algo ???

Código PHP:
<html>
<body>
<?php
/**
 * This class generates the country name and its flag from its IP address
 *
 *
 * @author Rochak Chauhan
 */

    
$CountryIPDatabase 'CountryIPDatabase.txt';
    
$ip '';

    
/**
     * Function to validate IP ( please modify it according to your needs)
     *
     * @param $ip - string
     *
     * @return boolean
     */
    
function ValdateIP($ip) {
        
$ipArray explode(',',$ip);

        if(
count($ipArray) != 4) {
            echo 
"<font color='red' size='3'> <b>ERROR: </b> Invalid IP</font>";
            return 
false;
        }else{
            return 
true;
        }
//Fin del if
    
}//Fin del function ValdateIP($ip)

    /**
     * Function to return Country name from the IPDatabase
     *
     * @param $ip string
     * 
     * @return string - name of the country, false otherwise
     */
    
    
function GetCountryName($ip) {
        
        
$ip sprintf("%u"ip2long($ip));

        
$csvArray file($CountryIPDatabase);

        for(
$i=0$i<count($csvArray); $i++) {
            
$arrayOfLine explode(','$csvArray[$i]);
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) {
                return 
$countryName $arrayOfLine[4];
            }
//Fin del if
        
}//Fin del for
        
return false;
    }
//Fin del function GetCountryName($ip)

    /**
     *  Function to return local path to Country's flag
     *
     * @param $ip - string
     *
     * @return string - local path to flag image
     */
    
    
function ReturnFlagPath() {

        if(
$countryName trim(ucwords(strtolower(GetCountryName($ip))) )) {
            
$countryName str_replace(' ','%20',$countryName);
            return 
"flag/$countryName.gif";
        }else{
            return 
false;
        }
//Fin del else
    
}//Fin del function ReturnFlagPath()

$ip $_SERVER["REMOTE_ADDR"];

$countryName =  GetCountryName($ip);
$flagPath =  ReturnFlagPath();

echo 
"<BR> <B>Country: </B>".$countryName;
echo 
"<BR> <B>Flag: </B> <img src=".$flagPath." border='0'>";

?> 
</body>
</html>
__________________
"La vida sigue su curso, tú toma parte de ella."
  #12 (permalink)  
Antiguo 08/07/2009, 07:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: visualizar info dependiendo de la ip del cliente

Acuerdate que si lo estas probando en tu maquina no te salga nada porque no encuentra el IP 127.0.0.1. Tienes que pasarlo al servidor y probar.

Y otra cosa la variable

$CountryIPDatabase = 'CountryIPDatabase.txt';

Debe estar dentro de la unica funcion que estas usando
Código PHP:
    function GetCountryName($ip) { 
        
$CountryIPDatabase 'CountryIPDatabase.txt'
        
$ip sprintf("%u"ip2long($ip)); 

        
$csvArray file($CountryIPDatabase); 

        for(
$i=0$i<count($csvArray); $i++) { 
            
$arrayOfLine explode(','$csvArray[$i]); 
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) { 
                return 
$countryName $arrayOfLine[4]; 
            }
//Fin del if 
        
}//Fin del for 
        
return false
    }
//Fin del function GetCountryName($ip) 
Ya lo probe y funcionó. No tiene que estar adentro a menos que declares en la funcion que la variable $CountryIPDatabase es global
Ejemplo

Código PHP:
    $CountryIPDatabase 'CountryIPDatabase.txt'
    function 
GetCountryName($ip) { 
        global 
$CountryIPDatabase;
        
$ip sprintf("%u"ip2long($ip)); 

        
$csvArray file($CountryIPDatabase); 

        for(
$i=0$i<count($csvArray); $i++) { 
            
$arrayOfLine explode(','$csvArray[$i]); 
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) { 
                return 
$countryName $arrayOfLine[4]; 
            }
//Fin del if 
        
}//Fin del for 
        
return false
    }
//Fin del function GetCountryName($ip) 

Me dejas saber

Última edición por abimaelrc; 08/07/2009 a las 07:42
  #13 (permalink)  
Antiguo 09/07/2009, 07:59
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
Pregunta Respuesta: visualizar info dependiendo de la ip del cliente

oye funciona bien .. pero ...

en pais me ubica el nombre colombia y en bandera me muestra la de estados unidos ?????

Este es el codigo completo ..

Código PHP:
<html>
<body>
<?php
/**
 * This class generates the country name and its flag from its IP address
 *
 *
 * @author Rochak Chauhan
 */

    
$CountryIPDatabase 'CountryIPDatabase.txt';
    
$ip '';

    
/**
     * Function to validate IP ( please modify it according to your needs)
     *
     * @param $ip - string
     *
     * @return boolean
     */
    
function ValdateIP($ip) {
        
$ipArray explode(',',$ip);

        if(
count($ipArray) != 4) {
            echo 
"<font color='red' size='3'> <b>ERROR: </b> Invalid IP</font>";
            return 
false;
        }else{
            return 
true;
        }
//Fin del if
    
}//Fin del function ValdateIP($ip)

    /**
     * Function to return Country name from the IPDatabase
     *
     * @param $ip string
     * 
     * @return string - name of the country, false otherwise
     */
    
    
function GetCountryName($ip) { 
        global 
$CountryIPDatabase;
        
$ip sprintf("%u"ip2long($ip)); 

        
$csvArray file($CountryIPDatabase); 

        for(
$i=0$i<count($csvArray); $i++) { 
            
$arrayOfLine explode(','$csvArray[$i]); 
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) { 
                return 
$countryName $arrayOfLine[4]; 
            }
//Fin del if 
        
}//Fin del for 
        
return false
    }
//Fin del function GetCountryName($ip)  

    /**
     *  Function to return local path to Country's flag
     *
     * @param $ip - string
     *
     * @return string - local path to flag image
     */
    
    
function ReturnFlagPath() {

        if(
$countryName trim(ucwords(strtolower(GetCountryName($ip))) )) {
            
$countryName str_replace(' ','%20',$countryName);
            return 
"flag/$countryName.gif";
        }else{
            return 
false;
        }
//Fin del else
    
}//Fin del function ReturnFlagPath()

$ip $_SERVER["REMOTE_ADDR"];

$countryName =  GetCountryName($ip);
$flagPath =  ReturnFlagPath();

echo 
"<BR> <B>País: </B>".$countryName;
echo 
"<BR> <B>Bandera: </B> <img src=".$flagPath." border='0'>";

?> 
</body>
</html>
__________________
"La vida sigue su curso, tú toma parte de ella."
  #14 (permalink)  
Antiguo 09/07/2009, 08:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: visualizar info dependiendo de la ip del cliente

Tenias varios errores

Código PHP:
<html> 
<body> 
<?php 
/** 
 * This class generates the country name and its flag from its IP address 
 * 
 * 
 * @author Rochak Chauhan 
 */ 

    
$CountryIPDatabase 'CountryIPDatabase.txt'
    
$ip ''

    
/** 
     * Function to validate IP ( please modify it according to your needs) 
     * 
     * @param $ip - string 
     * 
     * @return boolean 
     */ 
    
function ValdateIP($ip) { 
        
$ipArray explode(',',$ip); 

        if(
count($ipArray) != 4) { 
            echo 
"<font color='red' size='3'> <b>ERROR: </b> Invalid IP</font>"
            return 
false
        }else{ 
            return 
true
        }
//Fin del if 
    
}//Fin del function ValdateIP($ip) 

    /** 
     * Function to return Country name from the IPDatabase 
     * 
     * @param $ip string 
     *  
     * @return string - name of the country, false otherwise 
     */ 
     
    
function GetCountryName($ip) {  
        global 
$CountryIPDatabase
        
$ip sprintf("%u"ip2long($ip));  

        
$csvArray file($CountryIPDatabase);  

        for(
$i=0$i<count($csvArray); $i++) {  
            
$arrayOfLine explode(','$csvArray[$i]);  
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) {  
                return 
$countryName $arrayOfLine[4];  
            }
//Fin del if  
        
}//Fin del for  
        
return false;  
    }
//Fin del function GetCountryName($ip)   

    /** 
     *  Function to return local path to Country's flag 
     * 
     * @param $ip - string 
     * 
     * @return string - local path to flag image 
     */ 
    
function ReturnFlagPath($ip){
        
$countryName trim(ucwords(strtolower(GetCountryName($ip))));
        if(!empty(
$countryName)){ 
            
$countryName str_ireplace('%20',' ',$countryName); 
            return 
"flag/$countryName.gif"
        }else{ 
            return 
false
        }
//Fin del else 
    
}//Fin del function ReturnFlagPath() 

$ip $_SERVER["REMOTE_ADDR"]; 

$countryName =  GetCountryName($ip); 
$flagPath =  ReturnFlagPath($ip); 

echo 
"<BR> <B>País: </B>".$countryName
echo 
"<BR> <B>Bandera: </B> <img src='".$flagPath."' border='0'>"

?>  
</body> 
</html>
1. Acuerdate siempre escribir entre comillas las direciones src. Por que habran direcciones con espacios en blanco.
2. No le dijiste de donde sacas el $ip en la funcion de ReturnFlagPath por eso le añadi el parametro dentro de los parentesis.
3. Saque de la condicion IF lo que tenias declarado y lo declare arriba, luego verifico si esta vacio o no.
4. el str_replace lo cambie a str_ireplace (es mas bien preferencia en este caso) y la forma como se debe llamar es str_ireplace("buscar","reemplazar","sujeto"), por lo tanto busco los %20 y los reemplazo por espacio en blanco. Tu lo tenias al revés.
  #15 (permalink)  
Antiguo 09/07/2009, 08:49
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
De acuerdo Respuesta: visualizar info dependiendo de la ip del cliente

ok .. muchas gracias ... funciono muy bien ..

ha ... ahi un error en esta linea ..

$countryName = str_replace('%20',' ',$countryName);

de resto ... muy bien ..

__________________
"La vida sigue su curso, tú toma parte de ella."
  #16 (permalink)  
Antiguo 09/07/2009, 08:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: visualizar info dependiendo de la ip del cliente

Se supone que no tenga %20 la direccion de src. Sino no encuentra lugares mencionados con espacio ejemplo

flag/Puerto%20Rico.gif no va a salir
flag/Puerto Rico.gif va a salir
  #17 (permalink)  
Antiguo 09/07/2009, 09:35
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 18 años, 6 meses
Puntos: 1
De acuerdo Respuesta: visualizar info dependiendo de la ip del cliente

... ok muchas gracias ---



__________________
"La vida sigue su curso, tú toma parte de ella."
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:22.