1. 程式人生 > >PHP使用 zip 擴展壓縮文件

PHP使用 zip 擴展壓縮文件

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 擴展壓縮文件