Hola,
si tienes posibilidad de hacerlo en segundo plano (usando cron) yo te
recomendaría esto. entonces cuando un usuario solicita generar un
informe, la acción se guarda y un script que ejecutas con cron la
procesaría y enviaría por ejemplo un email cuando esté listo.
muchos sistemas de conversión de vídeos etc usan algo parecido.
otra cosa es ejecutar un proceso en tu script y "desconectarlo" (detach)
para que se sigue ejecutando en el segundo plano. este proceso tendría
que tener un id único y podría grabar si estado cada cierto tiempo.
entonces le sacas al usuario una página que diga "tu pedido se está
procesando" y haces una llamada tipo /scripts/estados/ID_DE_TU_SCRIPT
con ajax que tendría que devolver el estado del script (10%, 20% etc..)
lo cual puedes usar para hacer una barra de progreso.
bueno, espero haberte ayudado o al menos haberte dado alguna que otra idea.
--
Daniel Zelisko
personal: http://daniel.zelisko.net
development: http://blog.devayd.com