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 ==
{
$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.