Foros del Web » Programando para Internet » PHP »

Archivo de Texto y bucle for

Estas en el tema de Archivo de Texto y bucle for en el foro de PHP en Foros del Web. Estoy utilizando algo muy sencillo para insertar ips baneadas : Código PHP: fopen ( "lista.dat" , "a" ); $fil_ban = file ( "lista.dat" ); for ( ...
  #1 (permalink)  
Antiguo 01/12/2012, 14:02
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 5 meses
Puntos: 20
Exclamación Archivo de Texto y bucle for

Estoy utilizando algo muy sencillo para insertar ips baneadas :

Código PHP:

fopen
("lista.dat","a");

$fil_ban=file("lista.dat");

for (
$p=0;$p<sizeof($fil_ban);$p++)
{

if (
$fil_ban[0]=="")
{
$request_ip="ok";
}
else
{

if (
$_REQUEST['ip']=="".trim($fil_ban[$p])."")
{
$request_ip="bad";
}
else
{
$request_ip="ok";
}

}


}


/// Nunca me da nada ..... el print da como resultado nada 

print $request_ip



Lo curioso es que al poner sizeof no me devuelve nda , es decir no detecta que if ($fil_ban[0]=="") , que el archivo posee cero entradas y de esta forma si posee cero dar opción a insertar la ip en la lista , es muy curioso nunca me había fijado en esto y no se si está mal o que , pasa que cuando pongo fuera del bucle : if echo $fil_ban[0] ; si me detecta que no hay entradas pero dentro del bucle no me da nada de nada , no lo comprendo la verdad el bucle recorrería todo el archivo supongo .....

Espero que alguien me diga que puede ser lo que ocurre pero cuando menos es raro .....


Saludos !!!
  #2 (permalink)  
Antiguo 01/12/2012, 15:16
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Archivo de Texto y bucle for

Hola, es que si el fichero está vacio no te entra en el bucle porque sizeOf es 0 y por tanto no hay ninguna iteración.

Yo pondría $request_ip como Ok de partida y si hay alguna coincidencia recorriendo el fichero pues lo pones en bad.

Asi te ahorras if y elses
Código PHP:
fopen("lista.dat","a");

$fil_ban=file("lista.dat");
$request_ip="ok";
for (
$p=0;$p<sizeof($fil_ban);$p++)
{
    if (
$_REQUEST['ip']=="".trim($fil_ban[$p])."")
        {
            
$request_ip="bad";
        }
}

print 
$request_ip
Saludos
  #3 (permalink)  
Antiguo 01/12/2012, 15:32
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 5 meses
Puntos: 20
Respuesta: Archivo de Texto y bucle for

Si si , se como dices pero no entiendo porque no detecta nada , es decir debería detectar que no hay "nada" en el ejemplo que puse , es que no tiene sentido ..... eso es lo que me choca ..... si el archivo está vacio , al ponerlo para ver si hay o no hay contenido debe salir eso .....
  #4 (permalink)  
Antiguo 01/12/2012, 15:41
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 11 años, 5 meses
Puntos: 10
Respuesta: Archivo de Texto y bucle for

pero es que si el fichero está vacio no te va a devolver nada.

A ver file() lo que hace es que vuelca las lineas del fichero a un array.

Si el fichero está vacio y no tiene ninguna linea sizeOf (http://php.net/manual/es/function.count.php) será 0 y por tanto

for ($p=0;$p<0;$p++)
conclusión no te entra en el bucle, y como $request_ip se define sólo dentro del bucle, si no php no entra en el bucle $request_ip no vale nada, está sin definir.

Entiendes el problema?

http://php.net/manual/es/function.file.php

Por eso te digo tu define $request_ip como ok y que sólo cambie al recorrer el bucle si hay alguna coincidencia.

Salu2 ;)
  #5 (permalink)  
Antiguo 01/12/2012, 17:18
 
Fecha de Ingreso: noviembre-2007
Mensajes: 498
Antigüedad: 16 años, 5 meses
Puntos: 20
Exclamación Respuesta: Archivo de Texto y bucle for

Correcto el problema es que no pone ni cero ese es justo el tema , si está vacio debería de darme cero o algo asi , el tema es lo qeu tu comentas debería poner cero o asi , el caso es que justamente no pone ni eso , de ahí mi pregunta , que me parece muy raro , si pongo <sizeof () no sale nada si pongo un numero si sale , pero es curioso no ?

Si pongo por ejemplo $file=file("datos.dat")

Al poner $file[0]; me debería de dar "nada" y podría hacer el condicional if ($file[0]==""){print "ok";}

El caso es que no sale nada ni pone ok ni nada y esto solo cuando se pone esto dentro del bucle por eso mi perpejlidad , si lo probaís vereís que no sale nada .....





Cita:
<?php

$fil_ban=file("lista.dat");
$fil_ban_count=count(explode(" ",trim($fil_ban[0])));




for ($p=0;$p<sizeof($fil_ban);$p++)
{

if ($fil_ban[$p]=="")
{
$request_ip="ok";
}
else
{

if ($_REQUEST['ip']=="".trim($file_ban[$p])."")
{
$request_ip="bad";
}
else
{
$request_ip="ok";
}

}






}

echo $request_ip;

?>


El resultado de este sencillo script es nada , al menos debería poner ok o bad , aunque el lista.dat esté vacio .....


Gracias a todos

Etiquetas: bucle
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:40.