in reply to keeping connection alive while spending time building a zip file

Short of timed-redirects, you need to off-load the ZIPping of the files to a separate process that you can fire off (say, a Unix socket based server of your own design in Perl). Then, use Javascript on the client and a small bit of AJAX to send up status info. When it's done, have the Javascript redirect to the file.
Information doesn't want to be free. It wants to be feline.