entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Función gethostbyaddr

Buenas. Estoy necesitando realizar una modificación en la geolocalización que tengo en mi sitio web.

Actualmente, como pueden ver en la siguiente query, poseo en una tabla las IP's almacenadas de los usuarios. Para mostrarlas, las extraigo de ahí y demás con las funciones del sitio geoplugin.net.

<?php
  $count_rows = 0;
  $sql_select = mysql_query("SELECT * FROM ips WHERE usuario LIKE '%".$_SESSION['USER:NAME']."%' ORDER BY ID DESC LIMIT 0, 40 ");
  while($logacc = mysql_fetch_array($sql_select))
  {
    $count_rows++;
?>
 <tr>
<td><center><p style="font-size:13px"><?php echo $logacc['Fecha']; ?></center></td>
<?php $meta = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$logacc['IP'])); ?>
<td><center><p style="font-size:13px"><?php echo $meta['geoplugin_countryName']; ?></center></td>
<td><center><p style="font-size:13px"><?php echo $logacc['IP']; ?></center></td>
<td><center><p style="font-size:13px"><?php echo gethostbyaddr($logacc['IP']); ?></center></td>
</td>
</tr>
<?php
  }
?>

Como verán, todo ok. He estado probando dándome varias IP's a mi mismo y en el último echo del código (donde uso la función gethostbyaddr) están siempre dándome hosts muy largos como resultados:

192.192.192.192.host.com.ar
fixed-203-141-29.iusacell.net
190.73-114-217.dyn.dsl.cantv.net
201-210-62-94.genericrev.cantv.net

Necesito hacer lo siguiente con esto, acortarlo. Sí. Que solo se muestre la última parte, es decir, el sitio web principal del proveedor de Internet del usuario (o host). En lugar de la lista de arriba, necesitaría que muestre lo siguiente (para que me entiendan mejor):

host.com.ar
iusacell.net
cantv.net
cantv.net

¿Esto es posible? ¿Cómo puedo hacerlo tocando lo que corresponde?

<td><center><p style="font-size:13px"><?php echo gethostbyaddr($logacc['IP']); ?></center></td>

Gracias.

2 Respuestas

2votos

gonnotda Puntos770

¡Hola de nuevo!

Te paso el código que yo haría, está muy a la bruto pero te ilustra un poco como hacerlo, aunque hay seguro alguna forma un poco más limpia para conseguirlo:

<?php
$txt  = "192.192.192.192.host.com.ar";
$list = explode(".", $txt);
$count = count($list);
if ($count > 2) 
{
    echo $txt . ' -> ' . $list[$count - 2] . '.' . $list[$count - 1] . '<br />';
}
else
{
    echo $txt . ' -> ' . $txt . '<br />';
}

$txt  = "fixed-203-141-29.iusacell.net";
$list = explode(".", $txt);
$count = count($list);
if ($count > 2) 
{
    echo $txt . ' -> ' . $list[$count - 2] . '.' . $list[$count - 1] . '<br />';
}
else
{
    echo $txt . ' -> ' . $txt . '<br />';
}

$txt  = "190.73-114-217.dyn.dsl.cantv.net";
$list = explode(".", $txt);
$count = count($list);
if ($count > 2) 
{
    echo $txt . ' -> ' . $list[$count - 2] . '.' . $list[$count - 1] . '<br />';
}
else
{
    echo $txt . ' -> ' . $txt . '<br />';
}

$txt  = "201-210-62-94.genericrev.cantv.net";
$list = explode(".", $txt);
$count = count($list);
if ($count > 2) 
{
    echo $txt . ' -> ' . $list[$count - 2] . '.' . $list[$count - 1] . '<br />';
}
else
{
    echo $txt . ' -> ' . $txt . '<br />';
}

?>

0voto

Leyes comentado

Muchas gracias.

1voto

gonnotda Puntos770

Te remito a esta página para que veas como utilizar la función "explode":
http://php.net/manual/es/function.explode.php

Lo que puedes hacer para obtener lo que quieres es quedarte con los dos últimos elementos del array resultante.

0voto

Leyes comentado

Gracias por tu respuesta. Según estuve leyendo se me complicaría hacerlo debido a que si quiero separarlo por puntos "." se confundiría porque en cada resultado pueden haber varios y no siempre el orden es el mismo, según ese manual puedo comenzar a definir cada string del comienzo al final, en mi caso como lo que necesito es separar la última parte, ¿cómo podría hacerlo? Espero estar explicándome bien.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta