美文网首页
php 批量压缩图片并下载

php 批量压缩图片并下载

作者: 风度翩翩的程序猿 | 来源:发表于2023-05-10 09:20 被阅读0次
            $images = []; // 为图片路径数组
            //$images的格式为$images=array('xxxx.jpg','yyyy.jpg');可以根据需要自己修改
            $filename = "./public/upload/" . date ( 'YmdHis' ) . ".zip";
            // 生成文件
            $zip = new ZipArchive();
            // 使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
            if ($zip->open ($filename ,\ZipArchive::OVERWRITE) !== true) {
                //OVERWRITE 参数会覆写压缩包的文件 文件必须已经存在
                if($zip->open ($filename ,\ZipArchive::CREATE) !== true){
                    // 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip
                    exit ( '无法打开文件,或者文件创建失败' );
                }
            }
            foreach($images as $key => $v){
               // $v['swfimglist'] =  substr($v['swfimglist'],1);
                //addEmptyDir没搞明白有什么用,就是多了一个文件夹
                $zip->addEmptyDir("attach");
                //iconv('utf-8','gb2312',$v),因为我的$v中含有中文,file_exists不识别中文,需要转码
                $urlfile=iconv('utf-8','gb2312',$v);
                $urlfile = str_replace('https://xmzq.xinfeng345.com','.',$urlfile);
               
                if(file_exists($urlfile)){
                    //get_basename($v),原来的basename()不识别中文,新建函数获取文件名
                    //iconv('utf-8','gb2312',get_basename($v))还是中文问题,没有中文的话basename($v)即可
                    $zip->addFile($urlfile, iconv('utf-8','gb2312',$this->get_basename($v)));
                } else {
                    // die('图片地址不对哦');
                    echo 'error';
                    //删除在服务器上创建的$filename压缩文件
                    @unlink($filename);
                    exit;
                }
            }
            // 关闭
            $zip->close();
            //下面是输出下载;
            header ( "Cache-Control: max-age=0" );
            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);
            exit;
        }
        
        
        function get_basename($filename){
            return preg_replace('/^.+[\\\\\\/]/', '', $filename);
        }
        
    

    相关文章

      网友评论

          本文标题:php 批量压缩图片并下载

          本文链接:https://www.haomeiwen.com/subject/nbgdsdtx.html