Code:
# udpate, damit es auch mit symlink Ordnern klappt muss ein / ans Ende der beiden finds:
find "$installdir/$cachedir/"
find "$installdir/$basedir/"
Das ganze dynamisch per php zu generieren/streamen oder auch nur zum Download durch php (mit Passwortschutz) zu streamen dürfte für die allermeisten an max_execution_time scheitern.
Man stelle sich ein 10 GB Urlaubsbilder-Zip vor, dass vielleicht ein paar Stunden runter lädt.
max_execution_time müsste man dann für dieses eine php-script auf 0 setzen.
Geht per .htaccess nur global für mindestens den Ordner in dem das Script liegt.
Damit bleibt es eher dabei, dass ohne größeren Aufwand mindestens das zip-File "ungeschützt" abrufbar ist, wenn sich ein "Angreifer" den Link dazu zusammen baut.
Aber dafür ergibt sich daraus vielleicht eine Lösung:
http://www.tinywebgallery.com/de/faq.php#h19
Ich hänge an den Dateinamen noch einen random-hash-Suffix an und hinterlasse den dann alternativen Link zum zip in "<Ordnername>.txt" (txt Dateien sind von der zentralen .htaccess ja eh geschützt).
Update folgt, Daniel