PHP使用 zip 擴展壓縮文件
阿新 • • 發佈:2018-03-14
nbsp AC 簡單實用 lag 實用 上傳 壓縮 結果 記錄
在公司遇到一個問題,是使用zip打包用戶的上傳文件,提供集體下載。
--
第一個想法就是使用exec在Linux進行打包。但是...exec方法吧,你懂得,我不太願意使用這個函數。
--
於是上網查找,結果就是,我低估了PHP對於IO的操作,給我的教訓是,以後遇到什麽問題應該先考慮怎麽從代碼層面解決,如果不行再考慮其他的。
--
安裝zip擴展的方法不多說,網上一搜一大片。
--
這裏主要說它的簡單實用方法【學習東西應該嘗試去PHP官方文檔查看,那裏給出了全面的Demo,不應該一直依賴Baidu.com】
這裏也貼出官方對於zip的具體地址:http://php.net/manual/zh/book.zip.php
--
這裏簡單介紹zip
實例化
$zip = new \ ZipArchive();
open方法,看一下官方對於這個方法的解釋
mixed ZipArchive::open ( string $filename [, int $flags ] )
第一個當然是你要打開的zip文件路徑,第二個可選參數
記錄幾個常用參數
ZIPARCHIVE::CREATE
(integer)如果不存在則創建一個zip壓縮包。
ZIPARCHIVE::OVERWRITE
(integer)總是以一個新的壓縮包開始,此模式下如果已經存在則會被覆蓋。
還有很多,這裏就不列舉了,需要的話可以在文檔上去查
這裏我們建立我的.zip
$res = $zip->open(‘test.zip‘, $zip::CREATE);
循環寫入我需要打包的內容
if ($res === TRUE) { foreach (‘打包目錄‘ as ‘目錄文件‘) { $zip->addFile(‘打包文件路徑‘, ‘名字‘); } $zip->close(); }
這樣在你的根目錄下就會有一個 text.zip的壓縮包。
這裏只簡單的說明了打包文件的用法,在之後的使用過程中肯定會使用更多的地方。
下面貼上整體代碼,裏面可能有我的業務部分在裏面。篩選一下就可以了
$attachments = those(‘attachment‘)->whose(‘performance‘)->is($performance); $zip = new \ ZipArchive(); // 創建zip-如果沒有則創建 $file_path = DATA_DIR . "/attachment/{$performance->id}/"; $file_name = ‘績效考核-‘.$performance->name.‘-‘.time().‘.zip‘; $res = $zip->open($file_path . $file_name, $zip::CREATE); if ($res === TRUE) { foreach ($attachments as $key => $attachment) { $zip->addFile($attachment->path.‘/‘.$attachment->name, $attachment->name); } $zip->close(); }
PHP使用 zip 擴展壓縮文件