PHP - problema al almacenar ip para bloquear acceso

 
Vista:
sin imagen de perfil
Val: 30
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema al almacenar ip para bloquear acceso

Publicado por joseph (15 intervenciones) el 31/10/2016 02:11:28
por que no funciona como debería funcionar mi script?

Estoy intentando almacenar la ip del visitante para que solo puedan entrar una ves a un sitio, logro que me almacene la ip y lo bloquea solo si la persona entra de forma seguida después de haberse guardado la ip.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$ip=get_ip();
 
if(listanegra(str_replace(".","",$ip))==true){
    echo "BLOQUEADO";
    exit();
}
echo "siga";
 
function listanegra($ip){
    $ips=file("ips.txt");
    $xx=0;
    while ($xx<=count($ips)){
        if($ips[$xx]==$ip){
            return true;
        }
        $xx++;
    }
    $file=fopen("ips.txt","a");
    fwrite($file,PHP_EOL.$ip);
    fclose($file);
    return false;
}
function get_ip(){
    return $_SERVER["REMOTE_ADDR"];}
?>


Ejemplo: si mi ip es= 11.22.33.44
la guardo como=11223344 sin los puntos

Primero busco en el txt que no este la ip, si la ip esta bloqueo el acceso, si no esta la guardo.

si entro dos veces seguidas efectivamente me bloquea el acceso, pero si entro después entro con otra ip, y vuelvo a entrar con mi ip, no me bloquea y me vuelve a guardar mi ip quedando así el archivo ips.txt:

11223344
55667788
11223344

si vuelvo a ingresar con mi ip efectivamente bloquea y no la guarda, pero si lo hago con tar y de nuevo la mía, la guarda

alguien sabe cual será el problema?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

problema al almacenar ip para bloquear acceso

Publicado por xve (6935 intervenciones) el 31/10/2016 09:25:37
Hola Joseph, el bucle que haces con el while, no lo entiendo, por lo que te lo he modificado por uno mas simple... creo yo!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$ip=get_ip();
 
if(listanegra(str_replace(".","",$ip))==true){
    echo "BLOQUEADO";
    exit();
}
echo "siga";
 
function listanegra($ip){
    $ips=file("ips.txt");
    $xx=0;
    foreach($ips as $i)
    {
        if(trim($i)==$ip){
            return true;
        }
    }
    $file=fopen("ips.txt","a");
    fwrite($file,PHP_EOL.$ip);
    fclose($file);
    return false;
}
function get_ip(){
    return $_SERVER["REMOTE_ADDR"];}
?>

La pregunta es... porque eliminas los puntos? al hacerlo, la ip 10.10.10.10 se puede confundir con la ip 10.101.0.10!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 30
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema al almacenar ip para bloquear acceso

Publicado por joseph (15 intervenciones) el 31/10/2016 15:17:18
tienes toda la razón, los había eliminado para evitar que si alguien tiene acceso al txt no vea las ip, pero mejor lo hago de otra forma, y me funciono perfecto tu bucle, por lo visto me estaba complicando. muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar