Foros del Web » Programando para Internet » PHP »

geoLiteCity me da error en una funcion

Estas en el tema de geoLiteCity me da error en una funcion en el foro de PHP en Foros del Web. Hola estoy intentando usar la clase geoLiteCity pero me da error en una funcion exactamente esta funcion: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original function _geoip_seek_country ...
  #1 (permalink)  
Antiguo 08/10/2012, 11:30
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
geoLiteCity me da error en una funcion

Hola estoy intentando usar la clase geoLiteCity pero me da error en una funcion exactamente esta funcion:

Código PHP:
Ver original
  1. function _geoip_seek_country($gi, $ipnum) {
  2.   $offset = 0;
  3.   for ($depth = 31; $depth >= 0; --$depth) {
  4.     if ($gi->flags & GEOIP_MEMORY_CACHE) {
  5.       // workaround php's broken substr, strpos, etc handling with
  6.       // mbstring.func_overload and mbstring.internal_encoding
  7.       $enc = mb_internal_encoding();
  8.        mb_internal_encoding('ISO-8859-1');
  9.  
  10.       $buf = substr($gi->memory_buffer,
  11.                             2 * $gi->record_length * $offset,
  12.                             2 * $gi->record_length);
  13.  
  14.       mb_internal_encoding($enc);
  15.     } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
  16.       $buf = @shmop_read ($gi->shmid,
  17.                             2 * $gi->record_length * $offset,
  18.                             2 * $gi->record_length );
  19.         } else {
  20.       fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
  21.         or die("fseek failed");
  22.       $buf = fread($gi->filehandle, 2 * $gi->record_length);
  23.     }
  24.     $x = array(0,0);
  25.     for ($i = 0; $i < 2; ++$i) {
  26.       for ($j = 0; $j < $gi->record_length; ++$j) {
  27.         $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
  28.       }
  29.     }
  30.     if ($ipnum & (1 << $depth)) {
  31.       if ($x[1] >= $gi->databaseSegments) {
  32.         return $x[1];
  33.       }
  34.       $offset = $x[1];
  35.         } else {
  36.       if ($x[0] >= $gi->databaseSegments) {
  37.         return $x[0];
  38.       }
  39.       $offset = $x[0];
  40.     }
  41.   }
  42.   trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
  43.   return false;
  44. }

el error que me da es este:

Notice: Uninitialized string offset: 0

exactamente la linea del error es esta:
Código PHP:
Ver original
  1. $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
  #2 (permalink)  
Antiguo 08/10/2012, 12:35
Avatar de Javier01  
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 11 años, 9 meses
Puntos: 31
Respuesta: geoLiteCity me da error en una funcion

Buenas tardes,

No estoy seguro, pero la razon puede ser que estas intentado asignar a una variable, su mismo resultado, cuando todavia no la declaraste con algun valor.

Osea, donde dice
Código PHP:
$x[$i] += ord($buf[$gi->record_length $i $j]) << ($j 8); 
Esto $x[$i] += seria lo mismo que:
$x[$i] = $x[$i] + 'blablabla';
Pero el problema es que le asignaste $x[$i] cuando todavia no tiene valor.
Prueba con lo siguiente:
Bajo el codigo del for del $i
Código PHP:
 for ($i 0$i 2; ++$i) { 
coloca el codigo
Código PHP:
$x[$i] =''
Saludos!
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.
  #3 (permalink)  
Antiguo 08/10/2012, 12:46
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
Respuesta: geoLiteCity me da error en una funcion

Hola Javier01, probe lo que me dijistes pero nada me sigue dando el mismo error, en realidad esta funcion deberia funcionar ya que yo no cambie nada descarge la libreria geoLiteCity sin cambiar nada, alguna otra solucion?
Saludos.
  #4 (permalink)  
Antiguo 08/10/2012, 15:42
Avatar de Javier01  
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 11 años, 9 meses
Puntos: 31
Respuesta: geoLiteCity me da error en una funcion

Probé una version de GeoLite de http://xref.moodle.org/nav.html?lib/geoip/index.html
junto con el .dat bajado dehttp://www.download3k.com/Install-GeoLite-Country.html
y no tuve problemas. Capas sea la version. prueba con la que te paso

Simpelmente bajas el geoip.inc y el README.htm del primer link, y el dat del segundo link. pones todo en el mismo directorio, y el
README.htm tiene ejemplos de prueba.

Disculpa por no poder ayudar mas

Saludos!
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.
  #5 (permalink)  
Antiguo 09/10/2012, 07:18
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
Respuesta: geoLiteCity me da error en una funcion

Hola Javier01, parece que ahora si que funciona bien muchas gracias por tu ayuda, por otro creo que no me vale para lo que lo quiero, te comento por si me puedes ayudar, lo que intento es redirecionar al usuario segun su provincia, en este caso en el pais de españa pero por sus provincias, osea que segun su provincia lo redirecione directamente, pero geoLiteCity no me da la posibilidad de localizar las provincias, como puedo solucionar mi problema.

Saludos.
  #6 (permalink)  
Antiguo 09/10/2012, 09:13
Avatar de Javier01  
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 11 años, 9 meses
Puntos: 31
Respuesta: geoLiteCity me da error en una funcion

Lo dificil es encontrar una base con las ip de las provincias. No se si haya una que sea free.
Puede usar la parte de geoip que tiene las regiones. Este enlace te dice como hacerlo:
http://teamtutorials.com/web-develop...s-geo-location
Usando esto te da un resultado como:
Código PHP:
Ver original
  1. geoiprecord Object
  2. (
  3.     [country_code] => ES
  4.     [country_code3] => ESP
  5.     [country_name] => Spain
  6.     [region] => 51
  7.     [city] => Sevilla
  8.     [postal_code] =>
  9.     [latitude] => 37.3824
  10.     [longitude] => -5.9761
  11.     [area_code] =>
  12.     [dma_code] =>
  13. )

Saludos!
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.
  #7 (permalink)  
Antiguo 09/10/2012, 09:31
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
Respuesta: geoLiteCity me da error en una funcion

Hola, javier01, gracias por tu ayuda aún estoy teniendo problemas no se si me falta algo por descargar pero poniendo el ejemplo que me posteastes arriba, cambiando solo la ip por la mia, me da este array vacio, que puede estar faltandome, saludos.
Código PHP:
Ver original
  1. geoiprecord Object
  2. (
  3.     [country_code] =>
  4.     [country_code3] =>
  5.     [country_name] =>
  6.     [region] =>
  7.     [city] =>
  8.     [postal_code] =>
  9.     [latitude] => -180
  10.     [longitude] => -180
  11.     [area_code] =>
  12.     [dma_code] =>
  13. )
  #8 (permalink)  
Antiguo 09/10/2012, 09:38
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
Respuesta: geoLiteCity me da error en una funcion

Solucionado, me habia olvidado descargar el archivo bat, gracias por toda la ayuda que me has dado una ultima cosita si es posible ya que no acabo de entender bien las funciones si solo quiero recuperar la ciudad com seria, saludos.

Última edición por azaz; 09/10/2012 a las 09:45
  #9 (permalink)  
Antiguo 09/10/2012, 09:59
Avatar de Javier01  
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 11 años, 9 meses
Puntos: 31
Respuesta: geoLiteCity me da error en una funcion

Precisas 5 archivos.

GeoIP.dat (lo tienes de las pruebas de ayer)
GeoLiteCity.dat (en los links que te pase aparece para descargar)
geoip.inc (lo tienes de las pruebas de ayer)
geoipcity.inc (en los links que te pase aparece para descargar)
geoipregionvars.php (en los links que te pase aparece para descargar)

revisa que esten todos los archivos en el mismo directorio.


Luego agregas un 6to archivo de test, y deberias poner algo como:

Código PHP:
Ver original
  1. <?php
  2. include("geoipcity.inc");
  3. $gi = geoip_open("./GeoLiteCity.dat", GEOIP_STANDARD);
  4. $rsGeoData = geoip_record_by_addr($gi, '80.25.25.25');
  5. geoip_close($gi);
  6.  
  7. print "<pre>";
  8. print_r($rsGeoData);
  9. print "</pre>";
  10. ?>

todos los archivos los puedes descargar de los links que te he pasado entre ayer y hoy.
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.
  #10 (permalink)  
Antiguo 09/10/2012, 10:04
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
Respuesta: geoLiteCity me da error en una funcion

ok, todo resuelto gracias a tu colaboracion, muchas gracias.

Saludos.
  #11 (permalink)  
Antiguo 09/10/2012, 15:54
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 8 años, 11 meses
Puntos: 10
Respuesta: geoLiteCity me da error en una funcion

perdonar que vuelva, pero estoy investigando sobre las clases del codigo y no logro mostrar en pantalla el objeto geoipdnsrecord, cualquier ayuda se agradece, saludos.

Etiquetas: funcion
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 01:33.