Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: mark182 en 28 Febrero 2011, 20:59 pm



Título: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 28 Febrero 2011, 20:59 pm
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:
Código:
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.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: Shell Root en 28 Febrero 2011, 21:02 pm
No creo que sea viable, para que quieres hacer eso? Quizás exista otra opción que no sea por programación.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 28 Febrero 2011, 21:10 pm
Para crear el archivo y apenas lo guarde con el nombre "archivo-entrada.txt", se guarde automaticamente en la base de datos.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 28 Febrero 2011, 21:11 pm
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 (http://www.php.net/manual/es/info.configuration.php#ini.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


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 28 Febrero 2011, 21:13 pm
Gracias yoya lo voy a probar.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 28 Febrero 2011, 21:21 pm
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.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 28 Febrero 2011, 21:43 pm
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.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 28 Febrero 2011, 21:59 pm
Disculpa mi ignoracia yoya pero que es un DoS?

Gracias.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 28 Febrero 2011, 22:11 pm
http://tinyurl.com/34bnw5o
Cita de: Wikipedia
En 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.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 28 Febrero 2011, 22:41 pm
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


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 28 Febrero 2011, 22:55 pm
El script puede causarte un DoS. También esta la opción que alguien encuentre el archivo y lo ejecute varias veces.

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.



Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: JungleBoogie en 28 Febrero 2011, 23:51 pm
Si no utilizaras ECHOs, podrias hacerlo con header() y volver a ejecutar el script.

Con ECHOs.... pues prueba con el META REFRESH


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 1 Marzo 2011, 00:32 am
Gracias JungleBoogie y yoya.
Lo que quiero hacer no es algo para una web, sino es una aplicacion que quiero utilizar para guardar productos en la base de datos. Estos productos estan en el archivo de entrada que es generado por una pistola lectora de codigo de barras.
Utilizo php por la sencilles, por las funciones para mysql que tiene y porque es el mejorsito que manejo.
Mas que nada quiero dejar el script en escucha para que, cuando la pistola genere el archivo, el script lo capte automaticamente y lo guarde en mysql


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 1 Marzo 2011, 12:10 pm
Solo agrégale set_time_limit(0); y déjalo a la escucha xD.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 1 Marzo 2011, 14:42 pm
Solo agrégale set_time_limit(0); y déjalo a la escucha xD.

hay un problema :S el servidor tiene deshabilitada esta funcion :S


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 1 Marzo 2011, 15:13 pm
Ps utiliza cron


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: mark182 en 1 Marzo 2011, 22:02 pm
Ps utiliza cron
mmm....no porque el cron como mucho se ejecuta cada 1 min y yo necesitaria que se ejecute cada ves el laser capta un codigo de barra.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: ~ Yoya ~ en 1 Marzo 2011, 23:42 pm
Ps con que se ejecute cada 1 minuto basta y seria lo mejor.


Título: Re: Utilizacion de un bucle infinito (script en escucha)
Publicado por: citosid en 8 Junio 2011, 20:38 pm
¿Lograste resolver tu problema? Si al final ya tienes un script que te crea un archivo puedes ejecutar en el mismo proceso una llamada al script que te guarda en la base de datos. Sería algo así:

Código:
// Código que genera el archivo
exec('screen -m -d -S php /path/to/script.php ' . $fileName);

De esta manera no se tarda a la hora de guardar el archivo, y además lo dejas en screen