[PHP] Ejecución de scripts.

SeiYa

Buenas, yo tengo una página en php normal y corriente.

Lo que yo quiero hacer es que cuando entra un usuario, compruebe la hora y ejecute un script.

Bien, parece sencillo, no me pongáis el if de la hora ni historias que ese no es el problema XD, lo que yo quiero hacer es que ejecute un script, pero no le haga cara al cliente, me explico.

Si yo quiero que ejecute un script pues puedo redirigirle a ese script perfectamente, lo que pasa es que será un script bastante gordo y no quiero que esté el cliente esperando que se ejecute ese script, sino que se ejecute en segundo plano en el sevidor sin afectar al cliente, no se si me explico.

Es decir, por ejemplo, que haga una actualización de la base de datos, una base de datos con muchos registros, si lo hago normalmente, el usuario vería una página que tardaría en cargar y lo mismo la cierra y fum, jode la ejecución, lo que quiero es que active en el servidor un script local que se encargue de hacer eso.

No se si ese script tiene que ser en php, perl ... ni idea por eso pido ayuda en este tema de ejecución de procesos en el servidor.

Un saludo y gracias.

LOc0


Es decir, por ejemplo, que haga una actualización de la base de datos, una base de datos con muchos registros, si lo hago normalmente, el usuario vería una página que tardaría en cargar y lo mismo la cierra y fum, jode la ejecución, lo que quiero es que active en el servidor un script local que se encargue de hacer eso.

Yo me hice un script para mandar SMS a través de otra web. En el momento que el usuario le daba a ENVIAR se cargaba un script php que hacía bastantes historias, pero para el usuario era completamente transparente. Al terminar, imprimía un mensaje para informar si el SMS se había enviado correctamente. El caso es que si el usuaro se cansaba y cerraba la ventana, la ejecución del PHP no se cortaba y el SMS se mandaba igual.

Lo que yo haría en tu caso sería cargar de primera una web con un mensaje avisando lo que vas a hacer y que puede llevar cierto tiempo y después redireccionar automáticamente a la URL del script en PHP. Cuando termine la actualización que imprima un mensaje o lo que sea. Y si el usuario se cansa de esperar y cierra, da igual porque el script ya ha empezado.

Salu2 ;)

PD: si mal no recuerdo en PHP hay una variable del servidor para controlar el máximo tiempo de ejecución de un script (no recuerdo el nombre).

SnAoW

No tengo tiempo para escribir, simplemente busca en Google "CRON TAB"

Cron tab : función que permite ejecutar un script php cada cierto tiempo.

erdanblo

#3

Necesitas que el servidor este sobre un sistema UNIX, que son los que incorporan el demonio cron.

SeiYa

Yo no quiero específicamente que cada X tiempo se ejecute un script, sino que, simplemente, si entra un usuario y hace click en actualizar, por ejemplo imagínate que actualiza una tabla con 10 millones de registros.

Pues en vez de estar el usuario esperando el resultado, que simplemente mande al servidor correr un proceso que se encarga de eso y el usuario ya puede cerrar la ventana y demás.

No se si se me entiende XD

cabron

Existe una función en PHP (ahora no recuerdo el nombre) que sirve para enviar un comando al sistema operativo.

Si no está deshabilitada por el administrador de tu servidor, lo único que tienes que hacer es guardar el script en el servidor, y ejecutarlo.

Lo debo tener apuntado por algún lado, si lo encuentro te lo pongo, y si no, ya sabes, google te ama.

Edit:

La función es system(), si no me equivoco sería algo así system( "php tuscript.php").

guner

shell_exec(string)
Aún así, la función espera a que termine el programa.

SnAoW

Si tu haces un CRON TAB, y le das que ejecute un script cada pocos minutos o segundos puedes decirle que compruebe si el usuario X a creado una sesion y si está creada le mandas a ese usuario los datos que quieras.

Si dices que el usuario tiene que refrescar y que le lleguen unos datos nada mas tienes que crear una sesion o unos cookies.

Creo que no entiendo bien lo que quieres hacer, pero doy ideas, suerte con tu función.

SeiYa

Vamos a ver, es como si quiero dar a un enlace que me lleva a un php que ejecuta una consulta que tarda 3 minutos, por ejemplo.

Lo que yo quiero es que esos 3 minutos no influyan para nada en el cliente, es decir, que no tenga que esperar a que refresque esa pantalla, que mande esa consulta a que se ejecute en el servidor.

Por ejemplo, una consulta que importa datos de una base de datos a otra y tarda 4 ó 5 minutos imaginaros. Pues en lugar de el usuario ver esperar a que cargue la página, que simplemente se ponga en proceso en el servidor y pueda cerrar a página y apagar el ordenador.

No se si me entendéis XD Lo de cabrón puede ser una solución.

BlisZ

http://es2.php.net/manual/es/function.ignore-user-abort.php

SeiYa

Exactamente lo que necesitaba! Gracias BlisZ!

Usuarios habituales

  • SeiYa
  • BlisZ
  • snaow
  • guner
  • cabron
  • erdanblo
  • LOc0