跳到主要內容

發表文章

目前顯示的是有「zip」標籤的文章

Xoops做一個php8.0下載多檔打包壓縮成ZIP格式方法

之前寫過一篇【 Xoops做一個php下載多檔打包壓縮成ZIP格式方法 】工作心得,不過那方法在PHP8.0中無法使用,原因是new ZipArchive必須要先有實體的zip檔才能實體化,否則會出現 ValueError: ZipArchive::open(): Argument #1 ($filename) cannot be empty 錯誤訊息,必須修改new ZipArchive寫法在$zip->open之前就先建立一個暫存的zip檔,這樣後面的程式就沒問題了,修改方法如下 ※原本的new ZipArchive code 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); //刪除暫存檔 } ※ php8.0修改過後的new Z...

Xoops做一個php8.0下載檔案自動壓縮成ZIP格式方法-教學撰寫:徐嘉裕Neil hsu

之前寫過一篇【 Xoops做一個php下載檔案自動壓縮成ZIP格式方法 】工作心得,不過那方法在PHP8.0中無法使用,原因是new ZipArchive必須要先有實體的zip檔才能實體化,否則會出現 ValueError: ZipArchive::open(): Argument #1 ($filename) cannot be empty  錯誤訊息,必須修改new ZipArchive寫法在$zip->open之前就先建立一個暫存的zip檔,這樣後面的程式就沒問題了,修改方法如下 ※原本的new ZipArchive code function zipArchivefunction($url="",$zipname="",$temp=""){ //$url 檔案原始路徑+檔名 //$zipname 檔案名稱 //$temp 檔案暫存路徑+檔名 /********利用ZipArchive產生壓縮檔************/ $zip = new ZipArchive; $zip->open($temp, ZipArchive::CREATE); //$zip->addFile($dir); //添加檔案 (若有大量檔案可使用迴圈) $new_filename = substr($url, strrpos($url, '/') + 1); //重新定義壓縮檔路徑 $zip->addFile($url, $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); ...

Xoops做一個php下載檔案自動壓縮成ZIP格式方法-教學撰寫:徐嘉裕Neil hsu

2021-11-15補充說明,由於PHP8.0對於new ZipArchive的寫法有改變,以下方法無法於PHP8.0中使用,如需使用PHP8.0開發Xoops模組zip下載功能的請參考這篇工作心得 Xoops做一個php8.0下載檔案自動壓縮成ZIP格式方法 通常下載檔案做個按鈕直接路徑指向檔案就能下載了,但現在瀏覽器越來越聰明,像是PDF,WOED或是圖片類型都會直接在瀏覽器開啟,而不會下載,再加上下載檔案會消耗網站上行頻寬,所以最好的方法就是吧要下載的檔案壓縮成ZIP格式再讓USER下載,減少頻寬消耗,這樣就都沒問題了,php5.2後都支援new ZipArchive函數,所以不用再去改什麼php.ini檔了。 方法如下: PHP-CODE-把以下程式碼放到模組的function.php裡面,於要觸發下載的PHP檔中引入function.php //下載檔案壓縮ZIP格式function function  zipArchivefunction($url="",$zipname="",$temp=""){ //$url 檔案原始路徑+檔名 //$zipname 檔案名稱 //$temp 檔案暫存路徑+檔名 /********利用ZipArchive產生壓縮檔************/ $zip = new ZipArchive; $zip->open($temp, ZipArchive::CREATE); //$zip->addFile($dir); //添加檔案 (若有大量檔案可使用迴圈) $new_filename = substr($url, strrpos($url, '/') + 1);  //重新定義壓縮檔路徑 $zip->addFile($url, $new_filename); $zip->close(); /********使用header命令php下載zip檔************/ header('Content-Type: application/zip'); //指定類型 header("Content-type: ".filetype(...