2021-11-15補充說明,由於PHP8.0對於new ZipArchive的寫法有改變,以下方法無法於PHP8.0中使用,如需使用PHP8.0開發Xoops模組zip下載功能的請參考這篇工作心得
//ZIP多檔打包下載
先做一個function丟到模組的function.php中方便重複使用
function zipArchivefunction($url="",$zipname="",$temp="){
//$url 檔案原始路徑+檔名(陣列格式)
//$zipname zip檔案名稱
//$temp 檔案暫存路徑+檔名
$zip = new ZipArchive;
$zip->open($temp, ZipArchive::CREATE);
//$url檔案路徑迴圈加入zip中
foreach ($url as $file) {
$new_filename = substr($file, strrpos($file, '/') + 1); //重新定義壓縮檔路徑
$zip->addFile($file, $new_filename);
}
$zip->close();
/********使用header命令php下載zip檔************/
header('Content-Type: application/zip');
//指定類型
header("Content-type: ".filetype("$temp"));
//指定下載時的檔名
header("Content-Disposition: attachment; filename=".$zipname."");
//輸出下載的內容。
readfile($temp);
unlink($temp); //刪除暫存檔
}
在需要使用ZIP下載的PHP檔案做初步參數設置產生ZIP檔下載
//$_POST['download']為POST過來的下載檔名陣列
foreach($_POST['download'] as $key=> $val){
$url[$key]="".XOOPS_ROOT_PATH."/uploads/".$xoopsModule->getVar("dirname")."/file/".$val."";
//設定檔案路徑
}
//產生ZIP檔
$zipname = timedate($datevar="Y-m-d-H-i-s").'.zip'; //輸出的zip檔名 (可自行修改)
$temp="".XOOPS_ROOT_PATH."/uploads/".$xoopsModule->getVar("dirname")."/file/temp/".$zipname.""; //設定ZIP暫存檔檔案路徑(temp資料夾需可寫入)
zipArchivefunction($url,$zipname,$temp);
實際來測試看看功能是否正常,先選擇兩個檔案下載!
送出後產生ZIP檔,
解壓縮的確有兩個檔案,而且都能正常開啟
這樣就可以了,功能都正常,有需要的朋友參考看看!!
工作心的撰寫:徐嘉裕 Neil hsu
留言
張貼留言