Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/12/2004, 07:02
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Tal como lo tengo ahora mismo, un botón javascript 'CANCELAR' que te lleva a otra página (javascript:document.location="...php"), no surge efecto ya que hasta que no finaliza la ejecución no te conduce a ella.
Eso es completamente normal .. PHP se ejecuta en el servidor .. genera toda su salida en un "buffer" y cuando termina entrega su "salida" al cliente .. En tu caso tu salida es ese javacript que ante tal evento lanzas ese javascript que indica al mismo "navegador" que "cambie" la página por otra que tu indicas.

Cita:
Mi pregunta es esa por tanto: Cómo meter un botón CANCELAR (button) que finalice la ejecución de un script y me conduzca a la página anterior o algo así?
En PHP tienes funciones para controlar el buffer de salida .. es decir, podrías forzar a PHP a que "entrege todo lo que tenga en el buffer" (parece un "asalto xD") a cada iteracción de tu bucle por ejemplo que obtiene esos N archivos ...

La función en concreto sería un: flush() despues de tu echo "algo" .... Pero, eso te va a ocasinor un efecto no muy "grato" de ver en el "cliente" .. a cada pasada de tu bucle se va a imprimir en el navegador ese "botón" y así uno tras otro hasta que finaliza tu rutina. Para evitar ese "detalle" tendrías que entrar a manejar algún evento en javascript o algo así.. y no sería muy "instantaneo" que el "botón" detecte que se ha pulsado entre uno y otro que se "genera". Tendrías que probarlo.

Lo otro que puede controlar PHP es definir una función que se ejecute hasta que termine este independiente de que el cliente cancele el script (cierre la ventana) a la "fuerza".

Concretamente .. la función es:
register_shutdown_function()
www.php.net/register_shutdown_function

Por mi parte la uso sobre todo para lanzar procesos tipo "enviar e-mails" (unos cuantos) .. dejo a PHP que termine cuando termine. El cliente queda liberado rápidamente. Por "desgracia" no hay comunicación "directa" entre esa función y tu "cliente" .. pero si usas otros médios de almacenamiento tipo "hacer un log en un archivo de texto plano .. o esa misma BD que vas llenado con tus datos de ese proceso" y lo lees .. podrías hasta "ver el progreso" de tu proceso. No sé hasta que punto cancelar la ejecución de esa función que se registró ... revisa en ese tema de esas funciones hay algunas más que te podrían servir.

Un saludo,