Jump to content


colerus

Member Since 09/01/2004
Offline Last Active 07/08/2008, 21:10
-----

Posts I've Made

In Topic: Criar Array Dessa Query [ Resolvido ]

07/08/2008, 20:54

da um print_r($coluna) entre tags <pre> e </pre> pra vc ver como q a array ta estruturada...

In Topic: Validar Ip Dentro Da Faixa De Ip

07/08/2008, 20:50

Só atente-se que o tipo integer do PHP é signed. Isto faz com que a função gere valores negativos para determinados endereços. ;)

Mas deixe-me te tacar uma idéia... Ao invés de ter um campo faixa_inicial e faixa_final no banco de dados, porque não usa um campo só usando o padrão CIDR?

Dê uma lida aqui: http://en.wikipedia....-Domain_Routing

Tomando a primeira faixa (189.12.0.0 - 189.13.255.255) como exemplo, ficaria: 189.12.0.0/15

Aí você poderia usar esta função, contida nesta mesma página do manual:

function netMatch($cidr, $ip)
{
	list($net, $mask) = explode ('/', $cidr);

	return (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net);
}

Para usá-la:

print netMatch('189.12.0.0/15', '189.12.125.12') ? 'dentro da faixa especificada'
												 : 'fora da faixa especificada';
[]’s :D



boa... vou dar uma testada e funcionando direito mando meu script embora... :D:D:D vlw

In Topic: Validar Ip Dentro Da Faixa De Ip

07/08/2008, 18:45

eu uso uma função minha para fazer isso... aí vai:

<?php
function checaIP($qual,$inicio,$final){
	$sub = explode(".",$qual);
	//rotinas para verificar se é um ip válido...
	if(count($sub) != 4){
		return array(false,"IP Inválido");
	}
	for($i = 0; $i < count($sub); $i++){
		if($sub[$i] < 0 || $sub[$i] > 255 || !is_numeric($sub[$i])){
			return array(false,"IP Inválido");
		}
	}
	$ini = explode(".",$inicio);
	//rotinas para verificar se é um ip válido...
	if(count($ini) != 4){
		return array(false,"Faixa inicial inválida");
	}
	for($i = 0; $i < count($ini); $i++){
		if($ini[$i] < 0 || $ini[$i] > 255 || !is_numeric($ini[$i])){
			return array(false,"Faixa inicial inválida");
		}
	}
	$fim = explode(".",$final);
	//rotinas para verificar se é um ip válido...
	if(count($fim) != 4){
		return array(false,"Faixa final inválida");
	}
	for($i = 0; $i < count($fim); $i++){
		if($fim[$i] < 0 || $fim[$i] > 255 || !is_numeric($fim[$i])){
			return array(false,"Faixa inicial inválida");
		}
	}
	// verificar se as faixas estao corretas
	if($ini[0]> $fim[0]){
		return array(false,"Faixa inicial deve ser menor que faixa final");
	}
	if($ini[1]> $fim[1] && $ini[0] == $fim[0]){
		return array(false,"Faixa inicial deve ser menor que faixa final");
	}
	if($ini[2]> $fim[2] && $ini[0] == $fim[0] && $ini[1] == $fim[1]){
		return array(false,"Faixa inicial deve ser menor que faixa final");
	}
	
	if($ini[3]> $fim[3] && $ini[0] == $fim[0] && $ini[1] == $fim[1] && $ini[2] == $fim[2]){
		return array(false,"Faixa inicial deve ser menor que faixa final");
	}
	
	//enfim verifica se o ip passado está dentro desta faixa...
	if($sub[0] < $ini[0] || $sub[0] > $fim[0]){
		return array(false,"IP fora da faixa");
	}
	if($sub[1] < $ini[1] || $sub[1] > $fim[1]){
		if($sub[0] >! $fim[0] || $sub[0] <! $ini[0]){
			return array(false,"IP Fora da Faixa");
		}
	}
	if($sub[2] < $ini[2] || $sub[2] > $fim[2]){
		if($sub[1] >! $fim[1] || $sub[1] <! $ini[1]){
			if($sub[0] >! $fim[0] || $sub[0] <! $ini[0]){
				return array(false,"FaixaIP Fora da Faixa");
			}
		}
	}
	
	if($sub[3] < $ini[3] || $sub[3] > $fim[3]){
		if($sub[2] >! $fim[2] || $sub[2] <! $ini[2]){
			if($sub[1] >! $fim[1] || $sub[1] <! $ini[1]){
				if($sub[0] >! $fim[0] || $sub[0] <! $ini[0]){
					return array(false,"IP Fora da Faixa");
				}
			}
		}
	}
	return array(true);
}

//Exemplo...
$ip = array("192.168.0.1","192.168.1.1","192.168.255.255","192.168.0.0","0.0.0.0","192.168.0.0",
"192.168.0.255","192.255.0.0","255.168.0.1","192.0.0.0");
$inicio = "192.168.0.0";
$fim = "192.168.0.255";

foreach($ip as $pk){
	$teste = checaIp($pk,$inicio,$fim);
	if($teste[0] == false){
		echo("erro: ". $teste[1] ."; IP: $pk; Inicio: $inicio; Fim: $fim<br />");
	} else {
		echo("Certo... IP: $pk; Inicio: $inicio; Fim: $fim <br />");
	}
}
?>

vlw...

IPB Skin By Virteq