I would like to create a zip file in memory using a ZipArchive (or a native PHP class) and read the content of the file back to the client. Is this possible? If so, how?
The files that I want to zip in this application are a maximum of 15 MB total. I think we should be in good shape memory-wise.
Take a look at the following library, it allows creating zip files and returning them as a stream: PHPClasses.org.
Try ZipStream (link to GitHub repo, also supports install via Composer).
From original author's website (now dead):
ZipStream is a library for dynamically streaming dynamic zip files
from PHP without writing to the disk at all on the server.
There is another thread talking about this:
Manipulate an Archive in memory with PHP (without creating a temporary file on disk)
nettle has suggested to use zip.lib.php from phpmyadmin. I think this is a rather solid solution.
FYI zip.lib.php does not exist anymore, it has been replace by ZipFile.php in the same libraries/ folder.