Foros del Web » Programando para Internet » PHP »

header() no sirve para recargar script?

Estas en el tema de header() no sirve para recargar script? en el foro de PHP en Foros del Web. Holas a todos. Les cuento: He realizado un script PHP que lee desde una base ciertos datos, los analiza y guarda en un archivo de ...
  #1 (permalink)  
Antiguo 11/07/2008, 10:42
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
header() no sirve para recargar script?

Holas a todos.

Les cuento: He realizado un script PHP que lee desde una base ciertos datos, los analiza y guarda en un archivo de texto y luego los muestra al usuario como un TXT para descargar.

Ahora bien, como son muchos los datos, yo los voy agregando al archivo de texto por lotes, o sea "paginado": voy recargando el script cada cierta cantidad de datos, con un numero de pagina incrementado en 1, hasta que llegue al tope y muestre el link para descargar.

Como esto lo hice en la web, para ir recargando el script, usé un formulario HTML y Javascript para enviarlo cada vez (de este modo le permito al usuario detener el proceso cuando lo desee).

Hasta ahí todo me va muy bien.

El caso es que tengo una nueva tarea: generar el mismo archivo, pero de manera automatizada, todos los días, y que una vez sea generado, enviarlo vía FTP al cliente. Para automatizar el asunto he usado cronjob.

Como había hecho todo el proceso vía web, he querido probar si podía repetir la mecánica en el servidor, sin valerse de formulario HTML ni de Javascript (con los cuales recibía los valores por POST). En su lugar he usado el arreglo SESSION y para recargar he usado header().

El problema me ha surgido al ejecutar el script después de una determinada cantidad de tiempo.

Como decía, cuando recargaba el script en la web, usaba Javascript. En el caso actual, uso header() .

Si bien me resulta, el proceso se cae al alcanzar las 20 recargas, aproximadamente (también depende del tiempo de sleep() que le dé entre recarga). En promedio el proceso es interrumpido a los 40 segundos, retornándome un archivo de texto con datos incompletos.

Con mi jefe pensamos que sería problema de timeout del servidor o de php, pero al correr el script desde la web, obtenemos distintos resultados O_O:
- Si lo ejecutamos desde Firefox, se cae a las 20 recargas, mostrando mensaje de error.
- Si lo ejecutamos desde IE, no se cae: realiza el proceso completo.
- Si lo ejecutamos en el servidor vía cronjob, pasa lo mismo que con Firefox, aunque claro, sin retornar error (el que seguro está en algún log, pero no lo hemos buscado).

Como sea, mi pregunta es si cuando usamos header() ¿no se supone que estamos recargando la página/script? O sea, cuando uso Javascript, al recargar yo entiendo que estoy iniciando un nuevo hilo, un nuevo proceso. ¿No debería ser igual con header()? Porque por lo que vimos, pareciera que no iniciara un nuevo hilo con cada llamada al header(), sino que lo toma como un solo proceso y por eso salta un timeout o algo así (al ejecutar el script por la web, no se carga la barrita cada vez, sino que la va llenando como si fuera todo un solo hilo...). La verdad no sé por dónde pillar el problema O_o.

Esop. Muchas gracias de antemano, y disculpen lo largo del post ^^
Saludos.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #2 (permalink)  
Antiguo 11/07/2008, 11:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: header() no sirve para recargar script?

Hola quinqui,

Cuando tu usas header() no abres un nuevo proceso, ya que el header lo que hace es hacer una redirección, si ves la estructura de las peticiones HTTP, veras que las redirecciones se hacen al inicio de tu script, si tu continuas haciendo varios headers() va a llegar el momento en que se corte ya que la petición HTTP nunca se va a completar, aunque sí en PHP al pasar a header inicias un proceso nuevo, pero la petición http es la misma.

Saludos.
  #3 (permalink)  
Antiguo 11/07/2008, 11:23
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: header() no sirve para recargar script?

O_O!!!
Entonces sí era lo que pensamos, que lo tomó como un solo proceso ¬____¬....... Qué mala onda xD

Gracias por la aclaración, GatorV :)

Ahora tendré que ver de qué manera recargar el script sin usar header T_T.......

EDITADO:

Qué digo! O_o..... ¿Ustedes mismos no saben otra manera de recargar el script, sin usar HTML ni header()?
La verdad es que llevo días pegada con esto, y mi cerebro no funciona bien ya (menos con el olor a resina que viene del taller de electrónica ¬_¬). Plis, agradeceré cualquier sugerencia ó_ò
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*

Última edición por quinqui; 11/07/2008 a las 11:32
  #4 (permalink)  
Antiguo 13/07/2008, 09:45
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: header() no sirve para recargar script?

Hola,
Si el servidor donde funciona el PHP es tuyo, bien podrías correr el programa via línea de comandos en vez de hacerlo via http, y si combinás eso con la posibilidad de eliminar el tiempo máximo de ejecución, deberías tener el problema resuelto


Saludos
  #5 (permalink)  
Antiguo 14/07/2008, 15:08
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: header() no sirve para recargar script?

Mmh, el servidor en efecto es de mi empresa, así que podría, en teoría, hacer lo que quisiera en él.

Ahora bien, hay muchos otros procesos corriendo en él, que llenan bases de datos y que generan informes a partir de la misma, es a su vez el mismo servidor que visitan los usuarios de las páginas de la empresa, por lo cual modificar el timeout no nos pareció lo más adecuado...

Cuando dices que yo quiero hacer correr el programa por http... ¿a qué te refieres con eso? Es que yo pensaba que al decir que lo haríamos correr por cron, pensaba que no sería http... ayns, ya me perdí :(
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
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.