Foros del Web » Programando para Internet » PHP »

Detener la ejecucion de un ciclo desde el cliente

Estas en el tema de Detener la ejecucion de un ciclo desde el cliente en el foro de PHP en Foros del Web. Hola a todos, espero que puedan ayudarme... El caso es q tengo un script php que abre y lee los archivos de una determinada carpeta ...
  #1 (permalink)  
Antiguo 27/03/2011, 17:49
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
Detener la ejecucion de un ciclo desde el cliente

Hola a todos, espero que puedan ayudarme...

El caso es q tengo un script php que abre y lee los archivos de una determinada carpeta y guarda la información de los mismos en la bd, el problema es q cuando la carpeta tiene muchos archivos el script tarda mucho en ejecutarse y quiero colocar un boton en la pagina para que termine la ejecución del ciclo al presionarlo y me muestre el informe de cuales son los archivos que guardó en la bd y cuales no...

Les agradezco la ayuda en lo q puedan...
  #2 (permalink)  
Antiguo 27/03/2011, 18:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Detener la ejecucion de un ciclo desde el cliente

Podrías ejecutar el contenido en un iframe y que para detenerlo solo tienes que redirigirlo a otra página. Acuérdate que PHP es un código que corre en el servidor y no vas a poder detenerlo a menos que cierres el navegador o cambies de dirección.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 27/03/2011, 19:18
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Detener la ejecucion de un ciclo desde el cliente

Tu lo haz puesto en el titulo; desde el cliente...
Este tema corresponde mas bien a JavaScript, poniendo un boton que envie una variable por ejemplo $detener y en el PHP cada que ejecute el ciclo cheque si $detener es TRUE, si es asi, que haga flush(); para mostrar los datos sacados y enseguida termine la ejecucion con exit()..

Es simplemente una idea.
Suerte!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #4 (permalink)  
Antiguo 27/03/2011, 19:51
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Detener la ejecucion de un ciclo desde el cliente

obviamente yo tengo la variable q comparo dentro del ciclo q cuando sea true me salgo del mismo, y es de tipo SESSION para que pueda ser modificada por otro script, el problema es q todavia no he logrado modificar la variable mientras se ejecuta el ciclo, ya lo intenté con AJAX pero no funciona ya que la funcion en php que se llama con ajax desd el boton se ejecuta luego d q el script con el ciclo haya terminado de ejecutarse... Ahora con respecto a lo del iframe no creo q me sirva xq mi intención no es detener el script completamente sino simplemente que se salga del ciclo para que el resto del script se ejecute y muestre el informe

Gracias por sus respuestas
  #5 (permalink)  
Antiguo 27/03/2011, 20:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Detener la ejecucion de un ciclo desde el cliente

No es así, PHP no está pendiente a cambios que hayas hecho a alguna variable, si empieza un ciclo lo continúa hasta el final. Ahora lo habrías indicado mejor de la forma como lo indicaste. Una forma de lograr que se detenga es colocando un tiempo de ejecución, es decir, usa time y unos calculos matemáticos para saber cuanto tiempo ha transcurrido y lo detienes despues de cierto tiempo, es decir algo como
Código PHP:
Ver original
  1. <?php
  2. $time = time();
  3. for($i=0; $i<9999999; $i++){
  4.     $codingTime = time() - $time;
  5.     if($codingTime == 5){
  6.         echo 'Empezó: ' . $time . '<br />'
  7.             . 'Terminó: ' . time();
  8.         exit;
  9.     }
  10. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 27/03/2011, 20:38
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Detener la ejecucion de un ciclo desde el cliente

Holas,

A lo que entiendo desde el inicio, es que theredescorpion, quiere detener el proceso de listado de varios archivos, pero eso facilmente lo podria hacer con una simple tecla ESC o sino el boton Stop del navegador, pero bueno, este tema podria mas de javascript que de PHP.

Lo que podrias es paginar tu listado o sino analizar el porque se demora en generar el listado.

Saludos
Gildus
__________________
.: Gildus :.
  #7 (permalink)  
Antiguo 27/03/2011, 20:41
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Detener la ejecucion de un ciclo desde el cliente

Por eso, abi..
Como el ciclo no espera a cambios, lo haremos esperar con un IF que se ejecute cada vuelta del ciclo
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 27/03/2011, 21:10
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Detener la ejecucion de un ciclo desde el cliente

Ok yo no quise decir que PHP esté pendiente de los cambios de la variable, quise decir que dentro del ciclo tengo un IF que verifica el valor de la variable para saber si ya pulsaron el boton y salir del ciclo, tambien yo se cual codigo php tengo que usar para cambiar el valor de la variable en otro script, el problema q existe como tal es como hacer para que el script de php que va a cambiar el valor de la variable se ejecute paralelamente, es decir, a la vez q se esta ejecutando el script que contiene el ciclo... para que este ultimo se detenga y muestre el informe... ahora creo q por ahora voy a usar la solucion alternativa q es como dijo abimaelrc y voy a limitar la cantidad de archivos que se leeran en cada ejecucion del ciclo.

Gracias a todos igual

Etiquetas: cliente, detener, ejecucion, ciclos
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 19:22.