Foros del Web » Programando para Internet » PHP »

Proceso en segundo plano

Estas en el tema de Proceso en segundo plano en el foro de PHP en Foros del Web. buenas tardes gente de foros del web. Queria consultar a alguien que tenga un poco de experiencia en el tema como realizo la siguiente accion?? ...
  #1 (permalink)  
Antiguo 04/06/2009, 14:09
Avatar de titocba  
Fecha de Ingreso: agosto-2008
Ubicación: Cordoba
Mensajes: 256
Antigüedad: 15 años, 8 meses
Puntos: 4
Pregunta Proceso en segundo plano

buenas tardes gente de foros del web.
Queria consultar a alguien que tenga un poco de experiencia en el tema como realizo la siguiente accion??

Quiero que cuando un usuario realice una determinada acción se lleve a cabo una tarea en segundo plano sin que el usario tenga que esperar dicho tiempo.

Paso a explicar mas en detalles, quiero que cuando por ejemplo un usuario realice una determinada accion se envie un mail a toda su lista de contactos, esto realizarlo en segundo plano ya que para este mailing utilizo sleep para enviarlo cada 'x' tiempo los mail, lo que dicha tarea tarda unos considerables segundos, es durante este tiempo el que yo no quiero que mi usario se quede esperando y pueda seguir navegando mienstras estas tareas se realizan en segundo plano, me explico??


muchas gracias por los aportes a diarios que realizan..
  #2 (permalink)  
Antiguo 04/06/2009, 14:19
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: Proceso en segundo plano

Usa ajax!
o podes abrir la pagina del escript en otra ventana con el mensaje cargando o realizando la accion mientras puede navegar en la ventana principal!
  #3 (permalink)  
Antiguo 04/06/2009, 15:07
 
Fecha de Ingreso: octubre-2005
Mensajes: 42
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Proceso en segundo plano

No sé que tipo de control tienes sobre el servidor en el que vas a ejecutar eso, pero te cuento como lo hago yo.
Utilizo la función exec para lanzar el proceso en segundo plano.
Código PHP:
<?php
exec
('php5 /path/to/mailer.php > /dev/null &');
?>
A través del comando "php5" ejecuto el archivo "/path/to/mailer.php" que es el que se encargará de enviar los emails. Faltaría pasarle el paramétro del usuario, pero eso te lo dejo para que lo investigues.
La parte importante del asunto es el caracter final "&" que hace que el proceso se lance en segundo plano.

De este modo el usuario no tendría que esperar a que todas las acciones que se realizan en "/path/to/mailer.php" terminen.

Para poder realizar esto necesitas poder usar PHP como CGI, en vez de como módulo de Apache. Es decir, necesitas php-cli instalado en tu sistema.

Espero que te haya servido.
  #4 (permalink)  
Antiguo 04/06/2009, 16:35
Avatar de bng5  
Fecha de Ingreso: junio-2009
Ubicación: 127.0.0.1
Mensajes: 269
Antigüedad: 14 años, 10 meses
Puntos: 24
Respuesta: Proceso en segundo plano

Normalmente los servidores web no cuentan con php-cli, así que si vas a ejecutar un programa externo quizás tengas que hacer un ejecutable en bash.

Código PHP:
<?php
exec
('/home/usuario/bin/mailer > /dev/null &');
?>
La otra opción es que inicies un script en php (en cualquier ventana, iframe o a través de AJAX) que no finalize. Para esto usas las funciones ignore_user_abort y set_time_limit.

Código PHP:
<?php
ignore_user_abort
(1); // sigue ejecutando aunque el usuario halla cerrado la conexión
set_time_limit(0); // el script no tiene límite de tiempo
...
?>
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 00:19.