Foros del Web » Programando para Internet » PHP »

Problemas Capturando La Ip

Estas en el tema de Problemas Capturando La Ip en el foro de PHP en Foros del Web. Hola!! Tengo problemas capturando la ip del usuario. Tome un script que encontre en este foro que me ayudaba a distinguir si utilizaba un proxy ...
  #1 (permalink)  
Antiguo 28/09/2003, 07:03
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 86
Antigüedad: 16 años, 4 meses
Puntos: 0
Problemas Capturando La Ip

Hola!!

Tengo problemas capturando la ip del usuario.
Tome un script que encontre en este foro que me ayudaba a distinguir si utilizaba un proxy o no y actuar en consecuencia para tener siempre la ip real. Pero me dice lo siguiente:


Cita:
Notice: Undefined index: HTTP_X_FORWARDED_FOR in C:\web\ip.php on line 11
Tengo la version 4.3.1 de PHP.

¿sabriaís decirme de que se trata?

Muchas gracias por adelantado.

Un saludo
__________________
"Quiero saber de todo.....y no se nada"
  #2 (permalink)  
Antiguo 28/09/2003, 08:49
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 16 años, 7 meses
Puntos: 2
como no pongas el code.... asi por arte de magia... como que no

mira este ejemplo

Código PHP:
<?php
if ($_SERVER) {
        if ( 
$_SERVER[HTTP_X_FORWARDED_FOR] ) {
            
$ip_real $_SERVER['HTTP_X_FORWARDED_FOR'];
}
    elseif ( 
$_SERVER['HTTP_CLIENT_IP'] ) {
            
$ip_real $_SERVER['HTTP_CLIENT_IP'];
}
else {
            
$ip_real $_SERVER['REMOTE_ADDR'];
}
}
 else {
        if ( 
getenv'HTTP_X_FORWARDED_FOR' ) ) {
            
$ip_real getenv'HTTP_X_FORWARDED_FOR' );
}
elseif ( 
getenv'HTTP_CLIENT_IP' ) ) {
            
$ip_real getenv'HTTP_CLIENT_IP' );
}
else {
            
$ip_real getenv'REMOTE_ADDR' );
}
}
echo 
'La ip es  '.$ip_real;
?>
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 28/09/2003, 13:58
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 17 años, 5 meses
Puntos: 16
Hola,

Supongo que estaras usando un codigo semejante al de nuevo (incluso el mismo).

El "problema" es que tienes configurado PHP para que muestre todos los mensajes de error (ERROR, WARNING y NOTICE). Es la mejor configuracion para un entorno de desarrollo, en mi opinion.

El mensaje que pones es un NOTICE, que no es un error propiamente dicho, sino mas bien un aviso de que quizas estes haciendo algo mal. En este caso te lo da porque intentas acceder a un elemento de un array que no existe.

El codigo mas "correcto" seria usando isset():
Código PHP:
<?php

if ($_SERVER) {

        if ( isset(
$_SERVER[HTTP_X_FORWARDED_FOR] )) {

            
$ip_real $_SERVER['HTTP_X_FORWARDED_FOR'];

}

    elseif ( isset(
$_SERVER['HTTP_CLIENT_IP'] )) {

            
$ip_real $_SERVER['HTTP_CLIENT_IP'];

}

else {

            
$ip_real $_SERVER['REMOTE_ADDR'];

}

}

 else {

        if ( 
getenv'HTTP_X_FORWARDED_FOR' ) ) {

            
$ip_real getenv'HTTP_X_FORWARDED_FOR' );

}

elseif ( 
getenv'HTTP_CLIENT_IP' ) ) {

            
$ip_real getenv'HTTP_CLIENT_IP' );

}

else {

            
$ip_real getenv'REMOTE_ADDR' );

}

}

echo 
'La ip es  '.$ip_real;

?>
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 28/09/2003, 14:50
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 16 años, 7 meses
Puntos: 2
xxxxdddddd, josemi, tienes razon con el isset , sabes si una varible está definida o no... ;)
__________________
3w.valenciadjs.com
3w.laislatv.com
  #5 (permalink)  
Antiguo 29/09/2003, 14:16
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 86
Antigüedad: 16 años, 4 meses
Puntos: 0
Muchisimas gracias a los dos.Lo he entendido pefectamente.

Vaya pedazo de moderador que estamos estrenando!!!!!
__________________
"Quiero saber de todo.....y no se nada"
  #6 (permalink)  
Antiguo 29/09/2003, 15:02
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 16 años, 7 meses
Puntos: 2
xxxxxxxxddddddd, si que es verdad, Josemi ya es Moderador... y de los buenos !!!!, (bueno, en realidad no hay ninguno malo). cuñaaAAaaoooOOo.
__________________
3w.valenciadjs.com
3w.laislatv.com
  #7 (permalink)  
Antiguo 06/11/2007, 02:44
 
Fecha de Ingreso: septiembre-2007
Mensajes: 5
Antigüedad: 12 años, 3 meses
Puntos: 0
Exclamación Re: Problemas Capturando La Ip

Muy buenas... estoy con el tema de los errores en PHP y eso... y me gustaría hacer una consulta a ver si pueden solucionarme esto.

Tengo el siguiente código:
Código PHP:
<?php 
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
 
$ip=$_SERVER["HTTP_X_FORWARDED_FOR"];
}
else

 
$ip=$_SERVER["REMOTE_ADDR"];
}
$sql_paises "SELECT name AS Pais, TP.iso AS CodPais FROM T_Paises TP INNER JOIN T_IPs TI ON TP.iso=TI.iso WHERE ip_inicio<=inet_aton('$ip') AND ip_final>=inet_aton('$ip');";
$paises=mysql_query($sql_paises,$link);
if(!
$paises)
{
 
$pais 'SPAIN';
 
$cod_pais 'es';
}
else
{
 
$row_paises mysql_fetch_array($paises);
 
$pais $row_paises['Pais'];
 
$cod_pais strtolower($row_paises['CodPais']); 
}
?>
Que es un include en otras páginas, lo que ocurre es que me lanza el siguiente warning:

PHP Warning: mysql_query(): 3 is not a valid MySQL-Link resource in httpdocs/inc/pais-visita.php on line 11


Tengo la siguiente función:

Código PHP:
<?php
function Conectarse() 

   if (!(
$link=mysql_connect("localhost","usuario","pass"))) 
   { 
      
header("location:http://fotowho.net/error-mysql.php");
      exit(); 
   } 
   if (!
mysql_select_db("fotowho_db",$link)) 
   { 
      
header("location:http://fotowho.net/error-mysql.php");
      exit(); 
   } 
   return 
$link
}
?>
Y la llamo de la siguiente manera:

Código PHP:
$link=Conectarse(); 
El tema es que tengo mas de 6000 visitantes diarios... y el log se está comiendo los inodos del disco y tengo que cortar el tema de los warnings como sea... si no es arreglandolo... quitando la notificación o algo.

Espero que me podais ayudar.
Muchas gracias, Jaime.
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 09:15.