搜尋
首頁php教程php手册php ZipArchive打包压缩zip文件实例

ZipArchive类是一个文件压缩解压类是一个php自来的zip类,我们可以直接简单创建一个类然后就能实现打包了,下面小编给各位介绍一下吧,有需要了解的朋友可进入参考.

这里我采用的是php自带的ZipArchive类

a) 我们只需要new一个ZipArchive对象,然后使用open方法创建一个zip文件,接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中,最好还得记得关闭该对象。

b) 注意点:使用open方法的时候,第二个参数$flags是可选的,$flags用来指定对打开的zip文件的处理方式,共有四种情况

i.ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉

ii. ZIPARCHIVE::CREATE如果指定的zip文件不存在,则新建一个

iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错  

iv.  ZIPARCHIVE::CHECKCONS

一、解压缩zip文件,代码如下:

$zip = new ZipArchive;//新建一个ZipArchive的对象 
/* 
通过ZipArchive的对象处理zip文件 
$zip->open这个方法的参数表示处理的zip文件名。 
如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE 
*/ 
if ($zip->open('test.zip') === TRUE) 
{
    $zip->extractTo('images');//假设解压缩到在当前路径下images文件夹的子文件夹php 
    $zip->close();//关闭处理的zip文件 
}

二、将文件压缩成zip文件,代码如下:

$zip = new ZipArchive; 
/* 
$zip->open这个方法第一个参数表示处理的zip文件名。 
第二个参数表示处理模式,ZipArchive::OVERWRITE表示如果zip文件存在,就覆盖掉原来的zip文件。 
如果参数使用ZIPARCHIVE::CREATE,系统就会往原来的zip文件里添加内容。 
如果不是为了多次添加内容到zip文件,建议使用ZipArchive::OVERWRITE。 
使用这两个参数,如果zip文件不存在,系统都会自动新建。 
如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE 
*/ 
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'; 
}

例子,执行打包代码如下:

<?php
import(&#39;ORG.Util.FileToZip&#39;);
// 打包下载
$cur_file = getcwd() . &#39;/dimg/2014052916/&#39;;
$handler = opendir($cur_file); //$cur_file 文件所在目录
$download_file = array();
$i = 0;
while (($filename = readdir($handler)) !== false) {
    if ($filename != &#39;.&#39; && $filename != &#39;..&#39;) {
        $download_file[$i++] = $filename;
    }
}
closedir($handler);
$scandir = new traverseDir($cur_file, $save_path); //$save_path zip包文件目录
$scandir->tozip($download_file);
?>

FileToZip 类,代码如下:

<?php
/** 
 * 遍历目录,打包成zip格式
 */
class traverseDir {
    public $currentdir; //当前目录
    public $filename; //文件名
    public $fileinfo; //用于保存当前目录下的所有文件名和目录名以及文件大小
    public $savepath;
    public function __construct($curpath, $savepath) {
        $this->currentdir = $curpath; //返回当前目录
        $this->savepath = $savepath; //返回当前目录
        
    }
    //遍历目录
    public function scandir($filepath) {
        if (is_dir($filepath)) {
            $arr = scandir($filepath);
            foreach ($arr as $k => $v) {
                $this->fileinfo[$v][] = $this->getfilesize($v);
            }
        } else {
            echo "<script>alert(&#39;当前目录不是有效目录&#39;);</script>";
        }
    }
    /** 
     * 返回文件的大小
     *
     * @param string $filename 文件名
     * @return 文件大小(KB)
     */
    public function getfilesize($fname) {
        return filesize($fname) / 1024;
    }
    /** 
     * 压缩文件(zip格式)
     */
    public function tozip($items) {
        $zip = new ZipArchive();
        $zipname = date(&#39;YmdHis&#39;, time());
        if (!file_exists($zipname)) {
            $zip->open($savepath . $zipname . &#39;.zip&#39;, ZipArchive::OVERWRITE); //创建一个空的zip文件
            for ($i = 0; $i < count($items); $i++) {
                $zip->addFile($this->currentdir . &#39;/&#39; . $items[$i], $items[$i]);
            }
            $zip->close();
            $dw = new download($zipname . &#39;.zip&#39;, $savepath); //下载文件
            $dw->getfiles();
            unlink($savepath . $zipname . &#39;.zip&#39;); //下载完成后要进行删除
            
        }
    }
}
/** 
 * 下载文件
 *
 */
class download {
    protected $_filename;
    protected $_filepath;
    protected $_filesize; //文件大小
    protected $savepath; //文件大小
    public function __construct($filename, $savepath) {
        $this->_filename = $filename;
        $this->_filepath = $savepath . $filename;
    }
    //获取文件名
    public function getfilename() {
        return $this->_filename;
    }
    //获取文件路径(包含文件名)
    public function getfilepath() {
        return $this->_filepath;
    }
    //获取文件大小
    public function getfilesize() {
        return $this->_filesize = number_format(filesize($this->_filepath) / (1024 * 1024) , 2); //去小数点后两位
        
    }
    //下载文件的功能
    public function getfiles() {
        //检查文件是否存在
        if (file_exists($this->_filepath)) {
            //打开文件
            $file = fopen($this->_filepath, "r");
            //返回的文件类型
            Header("Content-type: application/octet-stream");
            //按照字节大小返回
            Header("Accept-Ranges: bytes");
            //返回文件的大小
            Header("Accept-Length: " . filesize($this->_filepath));
            //这里对客户端的弹出对话框,对应的文件名
            Header("Content-Disposition: attachment; filename=" . $this->_filename);
            //修改之前,一次性将数据传输给客户端
            echo fread($file, filesize($this->_filepath));
            //修改之后,一次只传输1024个字节的数据给客户端
            //向客户端回送数据
            $buffer = 1024; //
            //判断文件是否读完
            while (!feof($file)) {
                //将文件读入内存
                $file_data = fread($file, $buffer);
                //每次向客户端回送1024个字节的数据
                echo $file_data;
            }
            fclose($file);
        } else {
            echo "<script>alert(&#39;对不起,您要下载的文件不存在&#39;);</script>";
        }
    }
}


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境