使用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
- 使用zlib庫解壓zip檔案
- PHP中實現函式過載PHP函式
- 場景實踐:使用函式計算打包下載OSS檔案函式
- php基礎,php自動載入的實現程式碼示例PHP
- PHP獲取和操作配置檔案php.ini的幾個函式PHP函式
- 用PHP實現上傳的ZIP檔案的解壓PHP
- Golang實現PHP常用函式GolangPHP函式
- Go實現PHP常用函式GoPHP函式
- PHP檔案的自動載入(autoloading)PHP
- PHP 幾行核心程式碼實現提取快手水印視訊播放地址PHP
- PHP內建字串函式實現PHP字串函式
- php 建立壓縮包zip,並將指定檔案放入zip中PHP
- PHP:檔案載入PHP
- php 把檔案加入到現有的zip壓縮包中PHP
- PHP程式碼簡潔之道——函式部分PHP函式
- 幾個簡單又實用的PHP函式PHP函式
- PHP 自己實現var_dump函式PHP函式
- PHP程式碼審計04之strpos函式使用不當PHP函式
- 使用 PHP 進行建立檔案並在下載後進行刪除PHP
- php 自帶datetime類的使用PHP
- 利用 PHP 反射實現內建函式文件PHP反射函式
- php實現共享記憶體程式通訊函式之_shmPHP記憶體函式
- php 函式PHP函式
- php函式PHP函式
- PHP 函式PHP函式
- php 打包 zipPHP
- PHP實現圖片(檔案)上傳PHP
- php下利用curl判斷遠端檔案是否存在的實現程式碼PHP
- php增量Hash函式的使用PHP函式
- ZipArchive 實現媒體後者檔案資源打包下載Hive
- PHP 使用檔案鎖 避免同時執行一個指令碼PHP指令碼
- php檔案Hash如何使用PHP
- PHP框架中的檔案載入的實現(自動載入/PSR規範/名稱空間)PHP框架
- 自研 PHP 框架 1.1_index.php 檔案說明PHP框架Index
- 自研 PHP 框架 1.0_index.php 檔案說明PHP框架Index
- [docker+gdb] 除錯 PHP 原始碼,看 strval 函式 C 實現Docker除錯PHP原始碼函式
- php怎麼知道一個檔案中有幾行內容PHP
- Docker+LNMP+Jenkins+ 碼雲實現 PHP 程式碼自動化部署DockerLNMPJenkinsPHP