PHP解压缩中文文件名乱码

本文介绍了在PHP开发中遇到批量下载文件时如何创建包含中文文件名的压缩文件并正确解压,重点解决了解压过程中可能出现的中文文件名乱码问题。通过使用ZipArchive扩展,并提供了相关解决乱码问题的参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发中,提到了批量下载文档的方法,但不是需要点击多次,逐个选择下载位置的批量下载,

而是类似于qq 邮箱的下载一个压缩文件,里面是是全部的需要下载的文件

话不多说,上代码;

这里,需要使用php的压缩扩展类 ZipArchive   ,大致开了下类,需要要求php版本大于5.2

/*批量下载文档*/
    public function betchdownload(){
            //需要通过浏览器下载 是get请求 传入文档id集合
            $ids = trim(I('ids'),',');
            $ids = explode(',',$ids);
            $filesArr = M('file')->where(['id'=>['in',$ids]])->field('filename,filepath')->select();
            foreach ($filesArr as $key=>$val){
                $filesArr[$key]['downpath'] = iconv("utf-8","gb2312", $val['filename']);//解决文件名乱码问题
            }
            $zipname = './files.zip';
             //要使用该类,需要先启用 extension=php_zip.dll
            $zip = new \ZipArchive ();
            $res = $zip->open ( $zipname, \ZipArchive::CREATE );
            if ($res === TRUE) {
                foreach ( $filesArr as $file ) {
                    //这里将服务器上的文件添加到下载内容中,并重新赋值下载zip文件内该文件的路径
                    $zip->addFile ( $file ['filepath'], $file ['downpath']);
                }
            }

            $zip->close ();
            header('Content-Type: application/octet-stream');
            header ( "Content-Type: application/zip" );
            header ( "Content-Transfer-Encoding: Binary" );
            header ( "Content-Length: " . filesize ( $zipname ) );
            header ( "Content-Disposition: attachment; filename=\"" . basename ( $zipname ) . "\"" );

            readfile ( $zipname );

            //如不删除,则在服务器上会有 $zipname 这个zip文件
            @unlink ( $zipname );
    }

注:最开始下载的时候,解压缩会发现中文文件名称乱码,百度后,找到了解答方案;链接如下

http://ask.zol.com.cn/x/3193865.html

虽然只是个小功能,还是有成就感的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值