Utilizacion de un bucle infinito (script en escucha)

Iniciado por mark182, 28 Febrero 2011, 20:59 PM

0 Miembros y 1 Visitante están viendo este tema.

mark182

Hola como estan?

Les cuento que es lo que quiero hacer. Mi idea es crear un script que este en escucha, esto significa que cuando vea que existe cierto archivo en el directorio principal del servidor, se ejecuten ciertas instrucciones.
Lo que hice fue crear un bucle do-while que compruebe la existencia del archivo. Si existe, guarda el contenido del archivo en la base de datos y luego lo borra. Lo borro para que quede en un bucle infinito (eso seria estar en escucha), asi cuando aparece el archivo nuevamente, repite la accion.

Les dejo el codigo:

do
{
if( file_exists("archivo-entrante.txt") )
{
$fp = fopen("archivo-entrada.txt","r");
if($fp)
{
while( !feof($fp) )
$cod = fread('archivo-entrada.txt');
//Se guarda contenido en BD.
}
else
{
echo "No se pudo abrir el archivo.";
}
fclose($fp);

if( unlink("archivo/archivo-entrada.txt") )
echo "Se guardo en BD";
else
echo "El archivo no se pudo borrar o no existe.";
}
}while( file_exists("archivo-entrante.txt") == false );



El problema es que mi script no se queda en "escucha", el error que me tira al ejecutarlo es el siguiente:

Citar
Fatal error: Maximum execution time of 10 seconds exceeded in /home/a3410577/public_html/leer-archivos.php on line 26


Como lo podria hacer?

Muchas gracias por su ayuda. Nos vemos.

Shell Root

No creo que sea viable, para que quieres hacer eso? Quizás exista otra opción que no sea por programación.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mark182

Para crear el archivo y apenas lo guarde con el nombre "archivo-entrada.txt", se guarde automaticamente en la base de datos.

~ Yoya ~

Los script en PHP, tiene un tiempo de ejecución definido en el PHP.ini. La directiva encargada del tiempo maximo de ejecucion es max_execution_time.

Para evitar esto, puedes usar la funcion set_time_limit, agregándole como primer parámetro 0, asi el tiempo de ejecución es infinito.

Agrégalo al inicio del source.
Código (php) [Seleccionar]
set_time_limit(0);
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

mark182


mark182

Otra pregunta,

Esto de dejar que entre en un bucle infinito, me podria llegar a traer algun tipo de problema en el servidor ¿que se caiga el servidor o algo por el estilo?

Yo creo que no, porque el script no llena memoria o algo por el estilo. Y si se queda en el bucle infinito no esta realizando nada, solamente preguntando por la existencia de un archivo.

Pero ustedes que seguramente entienden mas del tema, me podrian decir si puede fallar este bucle infinito?

Gracias.

~ Yoya ~

El script puede causarte un DoS. También esta la opción que alguien encuentre el archivo y lo ejecute varias veces.

Aunque exista la opción de que nadie encuentre el archivo, no esta bien tener un archivo que te cause DoS.

Te recomiendo que para ejecutar el código se le tenga que pasar un parámetro vía GET o POST o COOKIE, con algun dato.
Así evitarías que otra persona ejecute el source por error o buscando vulnerabilidades.

Yo en tu caso, editaría el source y eliminaría el do-while. Y lo que haría, seria ejecutar el script cada x tiempo, así evito un futuro auto DoS. Puedes usar cron o otro programa similar.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

mark182

Disculpa mi ignoracia yoya pero que es un DoS?

Gracias.

~ Yoya ~

#8
http://tinyurl.com/34bnw5o
Cita de: WikipediaEn seguridad informática, un ataque de denegación de servicio, también llamado ataque DoS (de las siglas en inglés Denial of Service), es un ataque a un sistema de computadoras o red que causa que un servicio o recurso sea inaccesible a los usuarios legítimos. Normalmente provoca la pérdida de la conectividad de la red por el consumo del ancho de banda de la red de la víctima o sobrecarga de los recursos computacionales del sistema de la víctima.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

mark182

Yoya gracias por la info pero mi script siempre esta en ejecucion indefinidamente. Lo q hace es entrar en la base de datos si existe el archivo de entrada. Pero el script siempre esta en ejecucion y no para