Problemas con IP en web DragonflyCMS 🥇 Foro Portal DragonFlyCMS, CPGNuke 🥇 p47 🗺️

Foro de Portal DragonFlyCMS, CPGNuke Foro de Portal DragonFlyCMS, CPGNuke: Información y Soporte sobre DragonFlyCMS, antiguo CPGNuke, el CMS para construir Portales Web y que integra su propia versión de foros PhpBB, galerias de fotos, y muchas cosas mas
Responder al tema Versión Imprimible
Página 1 de 1 - Tema con 4 Mensajes y 19279 Lecturas
Último Mensaje:
Foro de Portal DragonFlyCMS, CPGNuke Ver más mensajes sobre Problemas con IP en web DragonflyCMS en el foro
Autor Mensaje

Imagen: Aforo
Junior
Junior
Registrado:
18-02-2008
Mensajes: 257
Visitar sitio web del autor
Votos: 0 👍
Responder citando

EnlacesAsunto: Re: Problemas con IP en web DragonflyCMS

Publicado:
Bienvenido al foro.

Veo que tienes una versión de PHP inferior a la 5.2 (PHP Version 5.0.4) en esa versión los comandos inet_ntop y inet_pton de PHP estaban implementados, pero no funcionaban correctamente.

Supongo que no puedes actualizar tu servidor a una version de PHP posterior a la 5.2, así que te voy a proponer darle un "cambiazo".

Vete a la linea 603 del Fichero "includes/cmsinit.inc" y encontrarás lo siguiente:

Quote::
# IP Handling
Function encode_ip($ip) {
if (PHPVERS >= 43) { $backtrace = debug_backtrace(); }
$backtrace = empty($backtrace) ? array('file' => 'unknown', 'line' => 0) : $backtrace[0];
trigger_error("DEPRECATED call to <a href="http://dragonflycms.org/$function">$function</a>() by {$backtrace['file']} on line {$backtrace['line']}.", E_USER_WARNING);
return inet_pton($ip);
}

Function ip2long32($ip, $unsigned=false) {
$ip = ip2long($ip);
if ($ip > 2147483647) { $ip -= 4294967296; } // pow(2,32)
if ($unsigned && $ip < 0) { $ip += 4294967296; }
return $ip;
}

Function decode_ip($ip) {
global $db;
$ip = $db->unescape_binary($ip);
$l = strlen($ip);
if ($l == 5 || $l == 17) { --$l; $ip = substr($ip,0,-1); }
if ($l == 4 || $l == 16) {
return inet_ntop($ip);
} else if ($l == Cool {
$ip = explode('.', chunk_split($ip, 2, '.'));
return hexdec($ip[0]).'.'.hexdec($ip[1]).'.'.hexdec($ip[2]).'.'.hexdec($ip[3]);
} else if (preg_match('#^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})#', $ip, $match)) {
return $match[1];
}
return long2ip($ip);
}

Las funciones encode_ip($ip) y decode_ip($ip) son las encargadas de decodificar y codificar las IP.

Yo las he modificado de la siguiente manera:

Quote::
# IP Handling
Function encode_ip($ip) {
if (PHPVERS >= 43) { $backtrace = debug_backtrace(); }
$backtrace = empty($backtrace) ? array('file' => 'unknown', 'line' => 0) : $backtrace[0];
trigger_error("DEPRECATED call to <a href="http://dragonflycms.org/$function">$function</a>() by {$backtrace['file']} on line {$backtrace['line']}.", E_USER_WARNING);
return my_inet_pton($ip);
}

Function ip2long32($ip, $unsigned=false) {
$ip = ip2long($ip);
if ($ip > 2147483647) { $ip -= 4294967296; } // pow(2,32)
if ($unsigned && $ip < 0) { $ip += 4294967296; }
return $ip;
}

Function decode_ip($ip) {
$l = strlen($ip);
if ($l == 5 || $l == 17) { --$l; $ip = substr($ip,0,-1); }
if ($l == 4 || $l == 16) {
return my_inet_ntop($ip);
} else if ($l == Cool {
$ip = explode('.', chunk_split($ip, 2, '.'));
return hexdec($ip[0]).'.'.hexdec($ip[1]).'.'.hexdec($ip[2]).'.'.hexdec($ip[3]);
} else if (preg_match('#^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})#', $ip, $match)) {
return $match[1];
}
return long2ip($ip);
}

Function my_inet_ntop($ip) {
if (strlen($ip)==4) {
// ipv4
list(,$ip)=unpack('N',$ip);
$ip=long2ip($ip);
} elseif(strlen($ip)==16) {
// ipv6
$ip=bin2hex($ip);
$ip=substr(chunk_split($ip,4,':'),0,-1);
$ip=explode(':',$ip);
$res='';
foreach($ip as $seg) {
while($seg{0}=='0') $seg=substr($seg,1);
if ($seg!='') {
$res.=($res==''?'':':').$seg;
} else {
if (strpos($res,'::')===false) {
if (substr($res,-1)==':') continue;
$res.=':';
continue;
}
$res.=($res==''?'':':').'0';
}
}
$ip=$res;
}
return $ip;
}

### function inet_pton By djmaze@dragonflycms.org ###

Function my_inet_pton($ip)
{
# ipv4
if (strpos($ip, '.') !== FALSE) {
$ip = pack('N',ip2long($ip));
}
# ipv6
elseif (strpos($ip, ':') !== FALSE) {
$ip = explode(':', $ip);
$res = str_pad('', (4*(8-count($ip))), '0000', STR_PAD_LEFT);
foreach ($ip as $seg) {
$res .= str_pad($seg, 4, '0', STR_PAD_LEFT);
}
$ip = pack('H'.strlen($res), $res);
}
return $ip;
}

He incluido dos funciones que hacen lo mismo, pero funcionan con PHP 5.0 e incluso con versiones anteriores de PHP 4.

Y me funciona...

Pruebalo y si eres tan amable me dices algo.

_________________
http://www.aforo.es (La web de los foros divertidos)
Ir arriba Aforo
Compartir:
oliver
Imagen: Anonymous
Invitado



Votos: 0 👍
Responder citando

EnlacesAsunto: Re: Problemas con IP en web DragonflyCMS

Publicado:
Funciona.... Digo que funciona. Era eso.

Muchas gracias
Ir arriba
Compartir:

Imagen: Aforo
Junior
Junior
Registrado:
18-02-2008
Mensajes: 257
Visitar sitio web del autor
Votos: 0 👍
Responder citando

EnlacesAsunto: Re: Problemas con IP en web DragonflyCMS

Publicado:
Me alegro... Paso el tema al foro de DragonFly

_________________
http://www.aforo.es (La web de los foros divertidos)
Ir arriba Aforo
Compartir:
Mostrar mensajes de anteriores:
Responder al tema Versión Imprimible
Página 1 de 1 - Tema con 4 Mensajes y 19279 Lecturas - Última modificación: 06/03/2008


RSS: Foro Portal DragonFlyCMS, CPGNuke RSS - Últimos Mensajes
Cambiar a:  


Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
No Puedes adjuntar archivos en este foro
Tu puedes descargar archivos en este foro