Foros del Web » Programando para Internet » PHP »

Problema con proceso largo, por inactividad en el navegador

Estas en el tema de Problema con proceso largo, por inactividad en el navegador en el foro de PHP en Foros del Web. Buenos días Tengo un problemilla que no sé como solucionar. En una web tengo un formulario que importa archivos csv, mediante servicios web también en ...
  #1 (permalink)  
Antiguo 10/07/2013, 06:16
 
Fecha de Ingreso: febrero-2013
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 1
Exclamación Problema con proceso largo, por inactividad en el navegador

Buenos días

Tengo un problemilla que no sé como solucionar.
En una web tengo un formulario que importa archivos csv, mediante servicios web también en php.

Al subir el scv, primero se comprueban todas las filas, para ver si los datos estan bien, existen en la base de datos para la relación. Y si esta todo correcto, inserta los datos.

Es decir primero hace consultas de comprobación, y luego ya de actualización, inserción, borrado.

En archivos con menos líneas, no me da ningún error, y sube los datos. Pero cuado el archivo pasa de las 20000 filas, antes de terminar el proceso, se sale del navegador. Esto me paso con otro proceso, y lo solucione llamando directamente al archivo php en segundo plano.

En este caso no puedo solucionarlo así, porque necesito devolverle al usuario una respuesta cuando encuentre errores, o cuando el proceso termine.


Antes de empezar el proceso tengo puesto
set_time_limit(0);
ini_set('memory_limit', '-1');

Entiendo que pasa por el tiempo de inactividad del navegador. He probado con lo siguiente.

setInterval(function(){document.getElementById('ca rga').innerHTML="1"},60000);

Pensando que al hacer cambios en la página, el navegador recibe respuesta y así no se para. Pero me sigue pasando igual. Nose si lo tengo mal puesto.


Como puedo seguir dandole actividad a la página, sin hacer una recarga completa, para que no inicie de nuevo el proceso?, sino que siga realizando la importación, pero yo actualice el navegador para que no se salga.

Muchas gracias
  #2 (permalink)  
Antiguo 10/07/2013, 06:55
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 4 meses
Puntos: 13
Respuesta: Problema con proceso largo, por inactividad en el navegador

Si tiene acceso al php.ini aumente los valores :

max_execution_time y post_max_size.

si no tien acceso al php.ini, pruebe crear ficheros .htaccess añadiendo la línea:

php_value memory_limit 128M
php_value post_max_size 5M
php_value upload_max_filesize 5M
php_value memory_limit 300M
php_value max_execution_time 259200
php_value max_input_time 259200

si eso no le funca, pruebe añandiendo en el archivo php justo despues de <?php esto:

<?php ini_set('memory_limit', '128M');
ini_set('max_execution_time', '300');


saludos!
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #3 (permalink)  
Antiguo 10/07/2013, 06:59
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 10 meses
Puntos: 194
Respuesta: Problema con proceso largo, por inactividad en el navegador

Intenta mirar si te esta pasando esto https://bugs.php.net/bug.php?id=54443
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #4 (permalink)  
Antiguo 10/07/2013, 10:13
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 7 meses
Puntos: 56
Respuesta: Problema con proceso largo, por inactividad en el navegador

Puedes "partir" los archivos más pesados en bloques de un tamaño en donde conoces el margen de tiempo de proceso; otra salida que se me ocurre es que agregues todas la líneas del archivo recibido en una tabla temporal y luego la procesas, incluso con algún trigger o procedimiento almacenado puedes pasarle un poco del proceso al manejador de la base de datos.
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #5 (permalink)  
Antiguo 11/07/2013, 00:43
 
Fecha de Ingreso: febrero-2013
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Problema con proceso largo, por inactividad en el navegador

Buenos días.

Gracias por sus respuestas.



h2swider. No me está pasando lo del bug. Cuando no tenia puesto set_time_limit(0); Me salía un error a los 30seg.

Ahora no me sale error, al tiempo, no se 5min, llega un punto en el que la página se sale, y se va a la página principal. Como si no le respondiese el php, se hubiese acabado el tiempo, pero del navegador, no de php.

zerpico_01. Si tengo acceso al php.ini. Pero prefiero hacerlo en tiempo de ejecución con:
set_time_limit(0);
ini_set('memory_limit', '-1');

Porque solo quiero aumentarlo en determinados procesos. No en toda la aplicación.

Se que es un proceso muy largo. Pero es dentro de una administración del cliente, y sabe que el proceso va a ser largo, no e slo mismo que en una web abierta.


Es un csv de consumos, Si me pasa 30000 líneas con el cod. de producto y el cod. de usuario. Primero compruebo que cada código este creado. Para poder hacer la relación. Una vez comprobados, es decir 30000 consultas a la tabla clientes y otras 30000 a usuarios. Si todo esta correcto, habo las 30000 inserciones. En este caso concreto, debería sacar los errores despues de la comprobación, sin llegar a importar nada.

Pero ni siquiera termina de hacer las comprobaciones. Se sale antes.

Pensaba probar algo de ajax, para indicar de vez en cuando que el php responde, a ver si así no se sale del proceso.

Sabéis si con eso puede funcionar. Si es así como puedo hacerlo? No sé mucho de ajax.


jcxnet. No puedo partir los archivos porque los sube el usuario no yo.

Si lo haría con una tarea en segundo plano arreglaría el problema de tiempo de navegador. El problema es que necesito o bien devolverle el mensaje de error a mitad del proceso, o devolverle que todo esta bien, cuando termine.

Muchas gracias a todos

Etiquetas: ajax, jquery, timeout
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 03:01.