php 打包压缩文件并下载,处理了中文路径以及路径中转义字符问题

试过了php自带的扩展ZipArchive,发现处理中文路径,文件名实在是太难了,处理不了。使用pclzip发现非常简单好用。

过程中处理了中文路径,文件名问题,以及转义字符问题

附上代码:

<?php
include_once('pclzip.lib.php');
$rootPath = $_SERVER['DOCUMENT_ROOT'];//网站根目录  
header("Content-type:text/html;charset=UTF-8");

// $titleLe=$_POST["$titleL"];

// $password=$_POST['password'];
$titleL="全国大学生电子商务“创新、创意及创业”挑战赛";
// $yuming="http://www.keyan.sjzlg.com:7070";
$date = date("YmdHis");

	require "connet.php";
   $conn=new Mysql();
 	
$sql="SELECT fujian FROM cansai WHERE zhuangtai=3 AND title LIKE '%".$titleL."%';";
  $result=$conn->sql($sql);
  
 $result = $result->fetch_all(MYSQLI_ASSOC);
 foreach ($result as $fujian){
	 
	$fujian['fujian']=addcslashes($fujian['fujian'],"\\"); //将转义字符\变成\\防止转义,这一步必须提前到这里,放后面特殊字符\已经转义了
	// echo $fujian['fujian'].",";
	 $fujian['fujian']=$rootPath . $fujian['fujian'];
	 $files[]=$fujian['fujian'];
	 // array_push($files,$fujian['fujian']);

 };
 
$filespath = implode(',',$files);//数组拼接成字符串
$filespath=iconv('utf-8','gbk//IGNORE',$filespath); //将utf-8转换成gbk,解决中文乱码问题
// $filespath=addcslashes($filespath,"\\");//将转义字符\变成\\防止转义

// echo $filespath;
$zipname='archive.zip';
$archive = new PclZip($zipname);

$v_list = $archive->create($filespath,PCLZIP_OPT_REMOVE_ALL_PATH); //把所有路径都去掉,这个压缩档建立完后,不会有目录了   

// $v_list = $archive->add("data/file.txt", PCLZIP_OPT_NO_COMPRESSION);//将一个档案加入一个压缩档中,但不会对此档案压缩 


if ($v_list == 0) {
    die("Error : ".$archive->errorInfo(true));
}else{

        $file_name = "/sever/".$zipname;
        // $file_name = iconv("utf-8","gbk//IGNORE",$file_name); // 特别注意!特别注意!特别注意这里,windows下必须开转码,不然直接文件不存
        $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_name;// 比如windows下这里我的是 "D:/web/public/upload/files/2019/04-29/中文测试包.rar"
        //判断如果文件存在,则跳转到下载路径
        if (!file_exists($file_path)) {
            die("文件不存在!");
        }

        $fp = fopen($file_path, "r+") or die('打开文件错误');   //下载文件必须要将文件先打开。写入内存
        $file_size = filesize($file_path);
        //返回的文件流
        Header("Content-type:application/octet-stream");
        //按照字节格式返回
        Header("Accept-Ranges:bytes");
        //返回文件大小
        Header("Accept-Length:" . $file_size);
        //弹出客户端对话框,对应的文件名
        Header("Content-Disposition:attachment;filename=" . substr($file_name, strrpos($file_name, '/') + 1));
        //防止服务器瞬间压力增大,分段读取
        $buffer = 1024;
        while (!feof($fp)) {
            $file_data = fread($fp, $buffer);
            echo $file_data;
        }
        fclose($fp);

		unlink($zipname);
        die("下载成功!");

}

 

 @readfile($zipname);不知道为什么用readfile打开文件会提示 “压缩包损坏或文件不存在的问题

用fopen打开就可以。。

 

附上插件下载:

点击下载pclzip插件

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
七只熊文库CMS ## 介绍 七只熊是类似百度文库,能够实现文档分享、售卖的文库CMS系统。用户上传源文档后,七只熊会自动将文档进行转码成HTML,成功后,将文档HTML返回文库CMS。实现免插件、在线浏览。 ## 快速体验入口 文库前端演示: http://doc.qizhixiong.com 文库管理后台: http://doc.qizhixiong.com/admin.php 七只熊官网:http://www.qizhixiong.com ## 软件架构 七只熊文库系统,由2个部分组成: 七只熊文库CMS: 用于文档内容管理、用户及权限管理、积分系统等。 七只熊转换系统:本系统不开源。用于配合文库CMS实现将office文档转换成HTML,以实现客户端在线浏览。 ## CMS主要功能概述 分类管理、文档管理、文档预览、收费文档悦读页数限制。 文档积分系统。 支付宝在线积分充值。 用户积分策略自由设置。 新闻系统。 论坛 + 文档悬赏系统。 企业名录系统。 大批量文档客户端软件。 全站广告系统。 文档专辑系统。 ## 安装教程 第一步: 下载七只熊文库。访问 http://您的域名/ 将会自动执行安装程序。 第二步: 进入后台 – 系统 – 站点设置,修改“网站链接”即您的站点域名, 域名后必须加上斜杠“/”,否则将导致图片显示失败,转换失败等问题。 第三步: 联系七只熊获取站点appid、appsecret ,并进入后台 – 系统 – 转换设置填写appid、appsecret。 第四步: 上传文档测试转换效果。 #### 伪静态 伪静态规则文件在程序根目录“伪静态实现”里,如遇到问题请自行百度或联系七只熊协助解决。 Apache RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] Nginx if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值