推荐两个相关页面:

php遍历到的文件是中文文件名 显示为乱码 该如何解决

http://taotaoit.com/article/details/805.html

Php如何实现下载功能超详细流程分析

http://taotaoit.com/article/details/803.html

进行了部分修改完善

php遍历上级目录、压缩上级目录保存到指定文件夹

http://taotaoit.com/article/details/992.html

直接上代码,原理部分我就不复制了,需要可以参考来源网址。

主要在原博主代码基础上加了jquery全选代码,文件夹和文件同时压缩功能。

文件名为中文时,遍历的时候乱码,压缩的时候不成功(终于解决了,请看getfile.php第18行和69行)。

list.php展示文件代码:

header("Content-type:text/html;charset=utf8");

require('./getfile.php');

$scandir=new traverseDir();

$scandir->scandir($scandir->currentdir);

$scandir->currentdir;

if (isset($_POST['down_load'])){

$items=$_POST['items'];

$scandir->tozip($items);//将文件压缩成zip格式

}

echo "当前的工作目录:".$scandir->currentdir;

echo "
当前目录下的所有文件";

?>

名称 大小(KB)

$res=$scandir->fileinfo;

foreach ($res as $k=>$v){

if (!($k=='.' || $k=='..')) {//过滤掉.和..

?>

<?php echo $k; ?>

echo number_format($v[0],0);

// $file_name = iconv("utf-8","GBK", number_format($v[0],0));

// echo $file_name;

// 中文名称乱码的问题没有解决

?>

}

}

?>

全选

$("#selall").click(function(){

var xz = $(this).prop("checked");//判断全选按钮的选中状态

var ck = $(".filename").prop("checked",xz); //让class名为qx的选项的选中状态和全选按钮的选中状态一致。

});

getfile.php压缩文件代码:

require'./download.php';

/**

* 遍历目录,打包成zip格式

*/

class traverseDir{

public $currentdir;//当前目录

public $filename;//文件名

public $fileinfo;//用于保存当前目录下的所有文件名和目录名以及文件大小

public function __construct(){

$this->currentdir=getcwd();//返回当前目录

}

//遍历目录

public function scandir($filepath){

if (is_dir($filepath)){

$arr=scandir($filepath);

foreach ($arr as $k=>$v){

$v2=iconv("gb2312","utf-8",$v); // 文件或目录为中文,显示乱码,因为页面是utf-8编码,从windows获得的文件名称是gb2312编码,所以要把文件名gb2312转出utf-8编码,输出到页面。但是getfilesize($v)也用到文件名获取文件大小,如果转成utf-8编码后,就找不到文件了,所以getfilesize($v)用的还是原来的gb2312编码,这也是上面变量命名为$v2的原因。关联本页面69行

$this->fileinfo[$v2][]=$this->getfilesize($v);

}

}else {

echo "";

}

}

/**

* 返回文件的大小

* @param string $filename 文件名

* @return 文件大小(KB)

*/

public function getfilesize($fname){

return filesize($fname)/1024;

}

/**

* 压缩目录

*/

public function addFileToZip($path, $zip) {

// 判断是文件还是目录,区别对待

if(is_dir($path)){

$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);

}else{

$zip->addFile($path);

}

}

/**

* 压缩文件(zip格式)

*/

public function tozip($items){

$zip=new ZipArchive();

$zipname=date('YmdHis',time());

if (!file_exists($zipname)){

$zip->open($zipname.'.zip',ZipArchive::CREATE | ZipArchive::OVERWRITE);//创建一个空的zip文件

for ($i=0;$i

// 判断是文件还是目录,区别对待

// if(is_file($items[$i])){

// $zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]);

// }else{

// $this->addFileToZip($items[$i], $zip);

// }

$v2=iconv("utf-8","gb2312",$items[$i]); // 由于遍历目录的时候,把文件夹名称转换成utf-8输出到页面的,所以通过表单提交的文件名是utf-8编码的,而utf-8编码的文件名在windows中是找不到对于文件的,所以要把文件名转换成gb2312编码。关联本页面18行

$this->addFileToZip($v2, $zip);

}

$zip->close();

$dw=new download($zipname.'.zip'); //下载文件

$dw->getfiles();

unlink($zipname.'.zip'); //下载完成后要进行删除

}

}

}

?>

download.php下载文件代码:

/**

* 下载文件

*/

class download{

protected $_filename;

protected $_filepath;

protected $_filesize;//文件大小

public function __construct($filename){

$this->_filename=$filename;

$this->_filepath=dirname(__FILE__).'/'.$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 "";

}

}

}

?>

php ziparchive自带吗,PHP自带的ZipArchive压缩文件并下载打包好的文件(重要)相关推荐

  1. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  2. php自带解压缩,PHP自带ZIP压缩、解压缩类ZipArchiv使用指南_PHP教程

    text.zip hello.txt word.txt ooxx.jpg 打开zip文件,以便进一步操作 ZipArchive::open (PHP 5 >= 5.2.0, PECL zip & ...

  3. sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题

    //下面代码中的主要是为了将数据绑定到repeater上,同时实现文件的下载,其中dr[3]中的路径绑定的是下载路径,用到了sharepoint中自带的download.aspx下载页面,只要将文件的 ...

  4. Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

    作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 36523458 ...

  5. 在origin 2018中同时画两个图,带errorbar和不带errorbar两种情况

    在origin 2018中同时画两个图,带errorbar和不带errorbar两种情况 在一个图层里同时画两幅图 两幅图坐标可不一致 ①在当前图层中,选中图层左上角的 1 标志 ②右键 1 →图层内 ...

  6. 安卓手机如何打开php文件夹,Android_Android中调用系统的文件浏览器及自制简单的文件浏览器,调用系统自带的文件浏览器- phpStudy...

    Android中调用系统的文件浏览器及自制简单的文件浏览器 调用系统自带的文件浏览器这很简单: /** 调用文件选择软件来选择文件 **/ private void showFileChooser() ...

  7. HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理...

    原文地址:http://blog.csdn.net/cdefg198/article/details/8315438 万能框架:http://www.sufeinet.com/forum.php?mo ...

  8. UTF-8带BOM和不带BOM的转换

    UTF-8带BOM和不带BOM的转换 标签:Linux UTF-8 BOM [问题] 在linux下如果你使用过的编码不是utf-8你可以使用enca进行转换,然而转换过后的情况是不带bom的uft- ...

  9. windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。

    1. 需求 我想把资源文件先加密成压缩文件,然后同时创建每个加密压缩文件同名的文件夹,同时需要把这个加密文件拷贝到这个同名的文件夹,然后还需要把一个图片和一个文本文档同时放进这个文件夹,然后在不加密压 ...

最新文章

  1. android java包_android SDk中常用的java包介绍
  2. mongodb索引--1亿条记录的查询从55.7秒到毫秒级别补充版
  3. python字符串赋值与java区别_java和python细节总结和java中string 的+操作
  4. 【Python学习笔记】Python深拷贝和浅拷贝
  5. win7系统的自动更新很长时间,如何关闭
  6. Anaconda-Navigator无法打开
  7. flash应用中的一个安全隐患
  8. 米家扫地机器人按键没反应_米家扫地机器人1S测评:性能暴增40%,全面提升带来极佳体验...
  9. Augustus:真核生物基因结构预测软件-安装篇
  10. 空头平仓什么意思_外汇空头平仓是什么意思?外汇如何平仓?
  11. locust工具学习笔记(五)-FastHttpUser类、关联、参数化、检查点、集合点
  12. 民营经济挑战未来发展
  13. 什么是证券市场?证券市场有哪些组成
  14. python版钉钉回调
  15. html表格标题的垂直对齐方式
  16. 从零开始搞起 Disney BRDF源码编译(含踩坑经历)
  17. 怎么用EDIUS将静帧图片做出动态特效
  18. ios客户端开源的项目
  19. python的re_research是什么意思_research在线翻译_英语_读音_用法_例句_海词词典
  20. SQLSERVER导入excel表格时,表中数据超过65536行

热门文章

  1. c#中使用XSLT将xml文档转换为html文档方法
  2. uni-app实现上传多张照片
  3. Vulhub 靶场安装
  4. linux ssh和scp,Linux SSH 与 SCP命令简述
  5. 关于解决vue.js中组件的template内容不能换行的问题
  6. mysql.5.5.21_centos6下mysql-5.5.21的安装
  7. python模块下载连接清华镜像的具体步骤_如何下载Pycharm开源版以及设置国内镜像源-百度经验...
  8. java xml获取属性值_java – 如何获取具体属性值的特定XML元素?
  9. ai保存web格式没有html,存储技巧,讲解AI存储为WEB所用格式的一些知识
  10. ffmpeg 视频转ts切片 生成m3u8视频播放列表