http://jqueryui.com/download
jQuery UI 可以選㚲自己想要的套件後
將該檔案壓縮成一個 zip 並且直接下載
我知道如何建立資料夾跟複製檔案集中到那個資料夾
但如何將該資料夾壓縮成一個 zip 並於壓縮後直接提供下載該怎麼做呢?
方案一:製作好壓縮檔,等 user 來下載。
方案二:製作好壓縮檔,前台自動幫 user 下載 (用 location.href 之類的)。
方案三:user 選完檔案後,一邊蒐集、一邊壓縮、一邊往 user client 端發送下載 (on-fly)。
方案一與二的好處是程式簡單容易寫,可以用 PHP 原生的 ZIP 支援或者要 call 外部程式 zip 來產生壓縮檔都可以。但是當 user 選擇的檔案一多、size 一大,就有可能會壓到 http (可能只有1分鐘) 或 php (預設30秒) timeout,而且不知道什麼時候該把壓縮檔砍掉,user 下載完就留著無用的壓縮檔,製造垃圾。
方案三的好處是即壓即傳,不管 user 選了多少檔案,都沒有 timeout 問題。不過程式稍微複雜一些些,要呼叫外部 zip 程式來把壓縮內容直接往 user 端丟:
<pre class="c" name="code">while (@ob_end_clean()); // 關閉所有 output buffer
header('Content-Disposition:attachment; filename="檔案名稱.zip"');
header('Content-Transfer-Encoding: binary');
header('Content-Type: application/octet-stream; name="檔案名稱.zip"');
passthru('/usr/bin/zip -r -q -D -9 - 蒐集檔案的目錄');