Foros del Web » Programando para Internet » PHP »

Flujo para ejecuciones largas en PHP

Estas en el tema de Flujo para ejecuciones largas en PHP en el foro de PHP en Foros del Web. Hola a todos, como siempre, agradezco por adelantado las atenciones al presente. Planteo mi problema: Estoy desarrollando un script para exportar una serie de datos ...
  #1 (permalink)  
Antiguo 05/09/2011, 10:01
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 15 años, 8 meses
Puntos: 4
Flujo para ejecuciones largas en PHP

Hola a todos, como siempre, agradezco por adelantado las atenciones al presente.

Planteo mi problema:

Estoy desarrollando un script para exportar una serie de datos de una base de datos de mysql a una en sql server; ya logré crear los diferentes scripts para hacer la exportacion por tabla (una funcion para cada tabla).

El asunto es que hay algunas tablas con mas de medio millon de registros y entonces el procesar esa tabla por si sola lleva al límite el tiempo de ejecución; mismo que no tengo permisos de configurar.

Para solucionar esto se me ha ocurrido crear una estructura como esta:

Código PHP:
    switch($_REQUEST['accion'])
    {
        default: 
            echo 
"Procesando fechas";
            
fechas(); 
            
sleep(5);
            
header("Location: index.php?accion=marca");
        break;
        
        case 
"marca":
            
sleep(5);
            echo 
"Procesando procesando marca";
            
marca();
            
header("Location: index.php?accion=region");
        break;
        
        case 
"region":
            
sleep(5);
            echo 
"Procesando regiones";
            
region();
            
header("Location: index.php?accion=distribuidor");
        break;
        
        case 
"distribuidor":
            echo 
"Procesando distribuidores";
            
distribuidor();
            
sleep(5);
            
header("Location: index.php?accion=campana");
        break;
        
        case 
"campana":
            echo 
"Procesando campañas";
            
campania();
            
sleep(5);
            
header("Location: index.php?accion=cliente");
        break;
        
        case 
"cliente":
            echo 
"Procesando cliente";
            
cliente();
            
sleep(5);
            
header("Location: index.php?accion=afiliacion");
        break;
        
        case 
"afiliacion":
            echo 
"Procesando afiliaciones";
            
afiliacion();
            
sleep(5);
            
header("Location: index.php?accion=facturacion");
        break;
        
        case 
"facturacion":
            echo 
"Procesando facturacion";
            
facturacion();
            
sleep(5);
            
header("Location: index.php?accion=punto");
        break;
        
        case 
"punto":
            echo 
"Procesando puntos";
            
punto();
            
sleep(5);
            
header("Location: index.php?accion=correo");
        break;
        
        case 
"correo":
            echo 
"Procesando correo";
            
correo();
            
sleep(5);
            
header("Location: index.php?accion=fin");
        break;
        
        case 
"fin":
            echo 
"Finalizado";
        break;    
    } 
Todavia debo parametrizar las funciones cuyas tablas tienen mas registros para ir extrayendo datos por partes.
Pero mi pregunta es: Un header("Location: algo.php"); me permitirá reiniciar el tiempo de ejecución cada vez?
__________________
Blog blog.desarrollandoideas.com

Twitter
Sígueme en Twitter
  #2 (permalink)  
Antiguo 05/09/2011, 10:06
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Flujo para ejecuciones largas en PHP

Hola que tal.

Para la acción que deseas hacer debes de modificar el php.ini en el parámetro de max_execution_time o si te es más eficiente lo puedes generar desde el código php colocando esta línea el principio de tu script para que omita el tiempo máximo de ejecución, toma en cuenta que php genera los procesos en forma secuencial y por eso tarda demasiado, puedes buscar un script para simular hilos en php, ya que con este proceso será más rápido


Código PHP:
Ver original
  1. if(ini_set("max_execution_time", "0"));

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 05/09/2011, 10:13
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Flujo para ejecuciones largas en PHP

Hola skiper0125, desfaortunadamente no tengo la posibilidad de cambiar el php.ini y por alguna razón (supongo que se trata de permisos) tampoco se me permite hacer cambios a la configuración en tiempo de ejecución.

Por eso es que pensaba en un switch que vaya controlando ese flujo, mas no se si el header("Location: algo.php") permita, al tiempo que redirecciona reiniciar el tiempo de ejecución.
__________________
Blog blog.desarrollandoideas.com

Twitter
Sígueme en Twitter
  #4 (permalink)  
Antiguo 05/09/2011, 10:19
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Flujo para ejecuciones largas en PHP

Cita:
Iniciado por pixel1 Ver Mensaje
Hola skiper0125, desfaortunadamente no tengo la posibilidad de cambiar el php.ini y por alguna razón (supongo que se trata de permisos) tampoco se me permite hacer cambios a la configuración en tiempo de ejecución.

Por eso es que pensaba en un switch que vaya controlando ese flujo, mas no se si el header("Location: algo.php") permita, al tiempo que redirecciona reiniciar el tiempo de ejecución.
Realiza una prueba con la sentencia que te coloque y comentas, ya que esa función me funciona para procesos de actualización que en ocaciones duran un poco más de 2 horas, o si deseas buscar el script que te comento que simula hilos tipo vb para crear tu proceso más rápido.
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #5 (permalink)  
Antiguo 05/09/2011, 10:48
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Flujo para ejecuciones largas en PHP

Cita:
Iniciado por skiper0125 Ver Mensaje
Realiza una prueba con la sentencia que te coloque y comentas, ya que esa función me funciona para procesos de actualización que en ocaciones duran un poco más de 2 horas, o si deseas buscar el script que te comento que simula hilos tipo vb para crear tu proceso más rápido.
Hola, ya hice la prueba con el script, y obtuve el mismo resultado, en menos de 10 minutos obtengo el mensaje en el que se indica que he llegado al limite en el tiempo de ejecucion.

Y no se si la simulacion de hilos pueda realizarla en el servidor en el que trabajo, pues es windows y php corre en IIS.

Gracias.
__________________
Blog blog.desarrollandoideas.com

Twitter
Sígueme en Twitter
  #6 (permalink)  
Antiguo 05/09/2011, 11:02
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Flujo para ejecuciones largas en PHP

Cita:
Iniciado por pixel1 Ver Mensaje
Y no se si la simulacion de hilos pueda realizarla en el servidor en el que trabajo, pues es windows y php corre en IIS.
lamentablemente la simulación no la vas a poder ya que solo funciona en linux, además no entiendo por que no te funciono tu script con la línea de código que te coloque
Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #7 (permalink)  
Antiguo 05/09/2011, 11:39
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Flujo para ejecuciones largas en PHP

Ni hablar, te agradezco, ojalá alguien por ahí pueda auxiliarme.
__________________
Blog blog.desarrollandoideas.com

Twitter
Sígueme en Twitter
  #8 (permalink)  
Antiguo 05/09/2011, 13:00
Avatar de DrFaust  
Fecha de Ingreso: septiembre-2011
Ubicación: Buenos Aires
Mensajes: 308
Antigüedad: 12 años, 7 meses
Puntos: 87
Respuesta: Flujo para ejecuciones largas en PHP

¿Qué evita que proceses los resultados de a bloques y vayas guardando los resultados en el disco duro?

SELECT * FROM datos LIMIT 0, 500000
SELECT * FROM datos LIMIT 50000, 500000

... Etcétera.

Podés mostrar una página de "¡Hecho! Continuar..." cada 50.000 registros o algo así. Y al final te permite descargar los resultados.

Etiquetas: ejecuciones, flujo, mysql, registro, sql, tabla
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 09:58.