Problemas con IP en web DragonflyCMS 🥇 Foro 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

SubForos: Dragonfly
Página 1 de 1 - Tema con 4 Mensajes y 19254 Lecturas
Último Mensaje Publicado:
Autor Mensaje
oliver

Invitado



Votos: 0 👍
Asunto: Problemas con IP en web DragonflyCMS  
Tengo instalado CPGNuke y me he dado cuenta que las IP se están guardando mal.

Mi servidor tiene las siguientes caracteristicas:

CMS Version: 9.2.0.RC2
PHP Version 5.0.4
MySQL Version 4.1.20 (client: 4.1.20)
Server API Apache 2.0 Handler

¿Podeis echarme una mano?
Ir arriba
Aforo

Junior
Registrado:18-02-2008
Mensajes: 257

Votos: 0 👍
Asunto: Re: Problemas con IP en web DragonflyCMS  
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, asi 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 == {
$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 == {
$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.
Ir arriba
oliver

Invitado



Votos: 0 👍
Asunto: Re: Problemas con IP en web DragonflyCMS  
Funciona.... digo que funciona. Era eso.

Muchas gracias
Ir arriba
Aforo

Junior
Registrado:18-02-2008
Mensajes: 257

Votos: 0 👍
Asunto: Re: Problemas con IP en web DragonflyCMS  
Me alegro... paso el tema al foro de DragonFly
Ir arriba
SubForos: Dragonfly
 
Todas las horas son GMT + 1 Hora
Página 1 de 1 - Tema con 4 Mensajes y 19254 Lecturas - Última modificación: 06/03/2008




RSS - Últimos Mensajes
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