PHP 压缩文件为zip

从网上复制的代码你往往会发现没有效果,因为

ZipArchive :: open()的参数2为ZipArchive :: OVERWRITE的时候,当目标文件已经存在时,程序会生成一个新的同名文件覆盖原来的文件,但是,当这个文件不存在时,ZipArchive ::打开( )将返回数字9,是常量ZipArchive :: ER_NOENT的整数值,错误信息是“没有这样的文件。”。

如果想要实现文件存在时自动覆盖文件不存在时自动创建,那么应该同时使用ZipArchive :: OVERWRITE和ZipArchive :: CREATE,这样是比较实用的,在没有的时候会自动创建

实现:

$zip=new ZipArchive;
        if($zip->open('联通-440.zip', ZipArchive::OVERWRITE | ZipArchive :: CREATE) === TRUE){
            $zip->addFile('联通-440.txt');//假设加入的文件名是image.txt,在当前路径下
            $zip->close();
        }

附赠压缩文件夹实现:

function index(){
    $zip = new ZipArchive();
        if ($zip->open('test.zip', ZipArchive::OVERWRITE | ZipArchive :: CREATE) === TRUE) {
            $this->addFileToZip('./log/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
            $zip->close(); //关闭处理的zip文件
        }
}

    function addFileToZip($path, $zip)
    {
        $handler = opendir($path); //打开当前文件夹由$path指定。
        while (($filename = readdir($handler)) !== false) {
            if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..',不要对他们进行操作
                if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
                $this->addFileToZip($path . "/" . $filename, $zip);
                } else { //将文件加入zip对象
                    $zip->addFile($path . "/" . $filename);
                }
            }
        }
        @closedir($path);
    }

$path 传入的是文件夹的路径

猜你喜欢

转载自blog.csdn.net/qq_24909089/article/details/81183408