Foros del Web » Programando para Internet » PHP »

Liberar cliente

Estas en el tema de Liberar cliente en el foro de PHP en Foros del Web. Hola, saludos a tod@s. Muy duda es sencilla, creo, pero no he sido capaz de solucionarla por mi mismo. 1.- El cliente envia un fichero ...
  #1 (permalink)  
Antiguo 13/03/2008, 03:37
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
Liberar cliente

Hola, saludos a tod@s.

Muy duda es sencilla, creo, pero no he sido capaz de solucionarla por mi mismo.

1.- El cliente envia un fichero al servidor.
2.- El servidor lo guarda en la carpeta concreta donde debe de estar.
3.- El siguiente paso es ejecutar un programa externo con "exec" utilizando el fichero enviando por el cliente.

Mi duda es, una vez terminado el paso 2 quiero que el cliente quede libre en su navegador para poder hacer otras cosas y no quede "colgado" hasta que termina la ejecucion el paso 3. Y no se como puedo hacerlo, es decir, que el servidor siga trabajando pero dejando libre al cliente.

Muchas gracias a tod@s.
  #2 (permalink)  
Antiguo 13/03/2008, 10:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Liberar cliente

En el manual de PHP, en la parte de exec vienen varias soluciones para ejecutar archivos en segundo plano.

Saludos.
  #3 (permalink)  
Antiguo 13/03/2008, 10:14
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Liberar cliente

Hola,

Citado de Cluster (te extrañamos )

Cita:
Tienes la función:
register_shutdown_function()
http://www.php.net/manual/en/functio...n-function.php

Con eso disparas tu proceso desde el navegador e ignoras el "user abort" (que el usuario cierre esa ventana). El proceso seguirá corriendo en segundo plano. Lo malo será si ese proceso "falla" .. ahí tendrás que generar algún tipo de "log" hacia un archivo o BBDD para que puedas ver que pasó si tines problemas.

Yo la uso para enviar mailing's .. levanto el proceso por acción "manual" del usuario (un link que llame a mi script de proceso) ... registro el proceso bajo una función y la llamo con esta otra .. en el script en sí de proceso digo algo tipo "ya puede cerrar esta ventana .. procesando datos" .. Y por otro lado (ya que hago registro en una BBDD de lo que voy haciendo), puedo ir mostrando el estado de avance si corresponde.

Más sobre el tema en:
http://www.php.net/manual/en/feature...n-handling.php

Un saludo,
De esta forma, cuando comienza el paso 3 podrias mostrar un mensaje "Ya puede cerrar la ventana".

y sino hacer algo con un cronjob, pero creo que en este caso no seria tan practico como esta funcion que menciona cluster.

Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #4 (permalink)  
Antiguo 17/03/2008, 02:41
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Liberar cliente

Cita:
Iniciado por GatorV Ver Mensaje
En el manual de PHP, en la parte de exec vienen varias soluciones para ejecutar archivos en segundo plano.

Saludos.


Hola, gracias por la respuesta, he estado un poco liado, pero no doy con la solución. En el manual leo esto pero no se como interpretarlo en forma de codigo:
-------------------------------------------------------------------------------------------------------
Nota: Si arrancamos un programa con esta funcion y queremos dejarlo ejecutandose en segundo plano, hay que asegurarse que el resultado del mismo es redireccionado a un fichero u otra salida o PHP se parara hasta que la ejecucion del programa termine.
-----------------------------------------------------------------------------------------------------


Si no tendre que probar la otra solución, pero preferiría esta, muchas gracias a los dos.

Un saludo
  #5 (permalink)  
Antiguo 17/03/2008, 16:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Liberar cliente

Lo haces con el comando:
Código:
programa > /dev/null
Pero solo serviría bajo GNU/Linux, bajo Windows no he encontrado todavía una forma de hacerlo correctamente, excepto usando un archivo .bat.

Saludos.
  #6 (permalink)  
Antiguo 24/03/2008, 03:46
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Liberar cliente

Cita:
Iniciado por GatorV Ver Mensaje
Lo haces con el comando:
Código:
programa > /dev/null
Pero solo serviría bajo GNU/Linux, bajo Windows no he encontrado todavía una forma de hacerlo correctamente, excepto usando un archivo .bat.

Saludos.
En el cmd de windows puedes hacer:

programa > salida.txt

que creo que es equivalente a lo que me decías pero no soluciono el problema, simplemente me crea un fichero en el que se muestra el resultado de la ejecución pero el cliente sigue "pillado" hasta que termina.

Le he dado una vuelta al popen ( pclose(popen($linea_comandos, "w")); )pero tampoco consigo nada... asi que no se que hare pero gracias de todos modos.
  #7 (permalink)  
Antiguo 24/03/2008, 04:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Liberar cliente

He encontrado la solución...

$linea_comandos = "start programa_a_ejecutar.exe [parametros si tiene]";
pclose(popen($linea_comandos, "w"));

Otras alternativas:

http://www.somacon.com/p395.php

Gracias a todos
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 08:57.