ThinkPHP实现将本地文件打包成zip下载_php实例

首先,将FileToZip.class文件放到ThinkPHP/Extend/Library/ORG/Util/文件夹中,FileToZip.class.php为zip下载类,其详细代码如下:

<?php
/**
 * zip下载类文件
 * 遍历目录,打包成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('当前目录不是有效目录');</script>";
   }
 }
 /**
  * 返回文件的大小
  *
  * @param string $filename 文件名
  * @return 文件大小(KB)
  */
 public function getfilesize($fname){
  return filesize($fname)/1024;
 }
 /**
  * 压缩文件(zip格式)
  */
 public function tozip($items){
  $zip=new ZipArchive();
  $zipname=date('YmdHis',time());
  if (!file_exists($zipname)){
   $zip->open($savepath.$zipname.'.zip',ZipArchive::OVERWRITE);//创建一个空的zip文件
   for ($i=0;$i<count($items);$i++){
    $zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]);
   }
   $zip->close();
   $dw=new download($zipname.'.zip',$savepath); //下载文件
   $dw->getfiles();
   unlink($savepath.$zipname.'.zip'); //下载完成后要进行删除
  }
 }
}
/**
 * 下载文件
 *
 */
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('对不起,您要下载的文件不存在');</script>";
  }
 }
}

ThinkPHP中加载zip下载类FileToZip.class.php并实现本地文件打包下载的功能代码如下所示:

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索打包
, zip
, thinkphp
本地文件
thinkphp 打包zip、thinkphp 打包zip下载、thinkphp ajax实例、thinkphp接口开发实例、thinkphp实例教程,以便于您获取更多的相关知识。

时间: 2024-09-15 17:12:02

ThinkPHP实现将本地文件打包成zip下载_php实例的相关文章

spring mvc java 把多文件打包成zip,并下载

再来一篇 /** * 压缩并导出文件 * @param zipPath 压缩文件临时路径 路径最后不要有 / * @param zipName 压缩为文件名 **.zip * @param createFilesPath 需要压缩的文件列表 * @param request * @param response * @return * @throws IOException */ public boolean downloadZip(String zipPath,String zipName,Li

ios-iOS 怎么把文件图片等打包成zip?

问题描述 iOS 怎么把文件图片等打包成zip? 如题,iOS 怎么把文件和图片等打包成zip?要用到什么第三方框架吗?打包好的zip文件怎么上传呢?求好心人指点 解决方案 可以用ZipArchive解压缩zip文件,至于上传zip文件和上传其它的文件没有差异 解决方案二: 可以用ZipArchive解压缩zip文件,至于上传zip文件和上传其它的文件没有差异

c#百度离线地图包将瓦片打包成ZIP打开是流,而js脚本文件的tilelayer层需要的瓦片的URL

问题描述 c#百度离线地图包将瓦片打包成ZIP打开是流,而js脚本文件的tilelayer层需要的瓦片的URL 如何将图片流转换成图片放入内存,然后通过URL指向内存,从而能显示瓦片 解决方案 http://www.csdn.net/tag/%25E7%2593%25A6%25E7%2589%2587

php将文件夹打包成zip文件的简单实现方法_php技巧

示例如下: function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filename=readdir($handler))!==false){ if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和'..',不要对他们进行操作 if(is_dir($path."/&q

Python脚本文件打包成可执行文件的方法

  这篇文章主要介绍了Python脚本文件打包成可执行文件的方法,本主要讲解了Python2.X版本的打包方法,对Python3.X的打包也有简单介绍,需要的朋友可以参考下 将Python脚本文件包装成可执行文件,其目的有二: 一则: 不需要依赖Python编译器就可以运行软件 二则: 不想让自己的源码公布出去 常用的工具有: py2exe.cx_freeze等 [工具:py2exe] 安装py2exe 安装该工具很简单: 只需要从官方网站:http://www.py2exe.org/下载与版本

ios-Xcode中如何将部分文件打包成静态库

问题描述 Xcode中如何将部分文件打包成静态库 我想要打包的文件中使用了第三方,例如AFNetworking,但是我并不想将第三方文件也打包到静态库中,请问该怎么设置? 解决方案 XCode打包静态库文件 解决方案二: 把你需要打包的文件新建一个工程放进去打包试试,希望能帮到你 解决方案三: 先将第三方编译静态库,再在你要打包的工程引用看看? 解决方案四: 很多sdk都有依赖库的,你可以参考下,就是单独拿出来

chrome插件-将.crx文件改成.zip文件后导致插件无法正常工作,这是什么原因?

问题描述 将.crx文件改成.zip文件后导致插件无法正常工作,这是什么原因? 最近在学习chrom插件,于是下载了一个chrome插件源码,是.crx文件,直接将它拖入chrome://extensions/安装后功能正常,为了研究它的源码,我将.crx文件改成.zip文件解压,这次我通过路径加载已解压的文件,插件却无法正常工作,这是什么原因?前端小白,求大神指点.

qt-多个.m文件打包成动态链接库给Qt调用的问题

问题描述 多个.m文件打包成动态链接库给Qt调用的问题 当用那个mcc -W lib:test1 -T link:lib test.m 时,如果我有一个主函数及多个子m函数,格式应该怎么写呢??? 是为每一个函数都创建一个dll呢,还是程序自己会分辨出哪个是主函数而只生成一个dll文件呢?? 恳请高手给个答案吧?? 解决方案 已经知道怎么解决了.

java多个文件压缩成zip包,并删掉源文件

问题描述 java多个文件压缩成zip包,并删掉源文件 一个文件夹下有txt文件,csv文件,zip文件,怎么将该文件夹下的所有csv文件压缩成zip包,并删掉原始的csv文件,大神能不能给个例子看一下,谢谢了. 解决方案 java压缩成zip 解决方案二: 这么专业的问题,路过,同求 解决方案三: public static void fileToZip(String sourceFilePath){ File sourceFile = new File(sourceFilePath); Fi