使用PHP自帶zlib函式幾行程式碼實現PHP檔案打包下載zip
<?php //獲取檔案列表 function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir($dir); foreach($file_dir as $file){ if ($file == `.` || $file == `..`){ continue; } elseif (is_dir($dir.$file)){ $result = array_merge($result, list_dir($dir.$file.`/`)); } else{ array_push($result, $dir.$file); } } } return $result; } //獲取列表 $datalist=list_dir(`../`); $filename = "./bak.zip"; //最終生成的檔名(含路徑) if(!file_exists($filename)){ //重新生成檔案 $zip = new ZipArchive();//使用本類,linux需開啟zlib,windows需取消php_zip.dll前的註釋 if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { exit(`無法開啟檔案,或者檔案建立失敗`); } foreach( $datalist as $val){ if(file_exists($val)){ $zip->addFile( $val, basename($val));//第二個引數是放在壓縮包中的檔名稱,如果檔案可能會有重複,就需要注意一下 } } $zip->close();//關閉 } if(!file_exists($filename)){ exit("無法找到檔案"); //即使建立,仍有可能失敗。。。。 } header("Cache-Control: public"); header("Content-Description: File Transfer"); header(`Content-disposition: attachment; filename=`.basename($filename)); //檔名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告訴瀏覽器,這是二進位制檔案 header(`Content-Length: `. filesize($filename)); //告訴瀏覽器,檔案大小 @readfile($filename); ?>
PHP ZipArchive是PHP自帶的擴充套件類,可以輕鬆實現ZIP檔案的壓縮和解壓,使用前首先要確保PHP ZIP擴充套件已經開啟,具體開啟方法這裡就不說了,不同的平臺開啟PHP擴增的方法網上都有,如有疑問歡迎交流。這裡整理一下利用php zipArchive進行檔案的壓縮與解壓縮的常用的示例供參考。
一、解壓縮zip檔案
$zip=new ZipArchive;//新建一個ZipArchive的物件 if($zip->open(`test.zip`)===TRUE){ $zip->extractTo(`images`);//假設解壓縮到在當前路徑下images資料夾內 $zip->close();//關閉處理的zip檔案 }
二、將檔案壓縮成zip檔案
$zip=new ZipArchive; if($zip->open(`test.zip`,ZipArchive::OVERWRITE)===TRUE){ $zip->addFile(`image.txt`);//假設加入的檔名是image.txt,在當前路徑下 $zip->close(); }
三、檔案追加內容新增到zip檔案
$zip=new ZipArchive; $res=$zip->open(`test.zip`,ZipArchive::CREATE); if($res===TRUE){ $zip->addFromString(`test.txt`,`file content goes here`); $zip->close(); echo `ok`; }else{ echo `failed`; }
四、將資料夾打包成zip檔案
function addFileToZip($path,$zip){ $handler=opendir($path); //開啟當前資料夾由$path指定。 while(($filename=readdir($handler))!==false){ if($filename != "." && $filename != ".."){//資料夾檔名字為`.`和‘..’,不要對他們進行操作 if(is_dir($path."/".$filename)){// 如果讀取的某個物件是資料夾,則遞迴 addFileToZip($path."/".$filename, $zip); }else{ //將檔案加入zip物件 $zip->addFile($path."/".$filename); } } } @closedir($path); } $zip=new ZipArchive(); if($zip->open(`images.zip`, ZipArchive::OVERWRITE)=== TRUE){ addFileToZip(`images/`, $zip); //呼叫方法,對要打包的根目錄進行操作,並將ZipArchive的物件傳遞給方法 $zip->close(); //關閉處理的zip檔案 }
下載Zip的類檔案
<?php /** * 檔案壓縮ZIP下載 */ class CreateExcel{ public $filename; public $filePath; public function __construct() { set_time_limit(0); } /** * 壓縮生成ZIP * * @Params String $filename 檔名稱 * @Params Array $filePath 檔案路徑(一維陣列) */ public function create($filename, $filePath) { $filename = $filename.".zip"; $this->filename = $filename; $this->filePath = $filePath; $this->Zip(); if(!file_exists($filename)) { return false;die;//即使建立,仍有可能失敗。。。。 } header("Cache-Control: public"); header("Content-Description: File Transfer"); header(`Content-disposition: attachment; filename=`.basename($filename)); //檔名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告訴瀏覽器,這是二進位制檔案 header(`Content-Length: `. filesize($filename)); //告訴瀏覽器,檔案大小 @readfile($filename); @unlink($filename); //刪除檔案 } /** * 壓縮生成Zip檔案 */ public function Zip() { $filename = $this->filename; $filePath = $this->filePath; if(!file_exists($filename)) { //重新生成檔案 $zip = new ZipArchive();//使用本類,linux需開啟zlib,windows需取消php_zip.dll前的註釋 if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { exit(`無法開啟檔案,或者檔案建立失敗`); } foreach( $filePath as $val) { if(file_exists($val)) { $zip->addFile( $val, basename($val));//第二個引數是放在壓縮包中的檔名稱,如果檔案可能會有重複,就需要注意一下 } } $zip->close();//關閉 } } }
相關文章
- SpringCloud 通過feign檔案傳輸並打zip包下載SpringGCCloud
- PHP中實現函式過載PHP函式
- 使用zlib庫解壓zip檔案
- 場景實踐:使用函式計算打包下載OSS檔案函式
- php基礎,php自動載入的實現程式碼示例PHP
- PHP中實現函式過載薦PHP函式
- PHP獲取和操作配置檔案php.ini的幾個函式PHP函式
- 用PHP實現上傳的ZIP檔案的解壓PHP
- zip打包下載
- 使用PHP下載檔案PHP
- [php]幾個常用函式PHP函式
- php程式碼生成txt檔案並下載PHP
- Golang實現PHP常用函式GolangPHP函式
- Go實現PHP常用函式GoPHP函式
- 在html檔案中執行php程式碼HTMLPHP
- php配置檔案與程式碼分離的實現思路PHP
- php線上解壓zip檔案的方法PHP
- php檔案重新命名下載程式碼示例PHP
- PHP 幾行核心程式碼實現提取快手水印視訊播放地址PHP
- PHP內建字串函式實現PHP字串函式
- PHP實踐之路(七)PHP函式PHP函式
- 批量去除PHP檔案中bom的PHP程式碼PHP
- 幾個簡單又實用的PHP函式PHP函式
- PHP:檔案載入PHP
- php檔案下載PHP
- php 檔案下載PHP
- php 建立壓縮包zip,並將指定檔案放入zip中PHP
- php 把檔案加入到現有的zip壓縮包中PHP
- PHP程式碼簡潔之道——函式部分PHP函式
- Nginx + PHP + MySQL (LEMP)安裝包下載NginxPHPMySql
- PHP 自己實現var_dump函式PHP函式
- 配置php.ini實現PHP檔案上傳功能PHP
- PHP不使用任何內建函式實現字串翻轉PHP函式字串
- PHP實現檔案下載斷點續傳詳解PHP斷點
- PHP檔案的自動載入(autoloading)PHP
- 使用 PHP 進行建立檔案並在下載後進行刪除PHP
- PHP檔案下載原理PHP
- php中幾個字串替換函式PHP字串函式