用php的header()方式下载压缩包。

要点:1、不能在header导出压缩包前向浏览器输出内容,否则文件下载压缩包成功,打开的压缩包也会显示被破坏。

2、在压缩文件包的php代码前不可以有js脚本、meta的加载,否则解压会显示损坏。

 <?php
if(isset($_POST['mac']))
{
// print_r($_POST); $mac = $_POST['mac'];
$date = $_POST['date'];
$version = $_POST['version']; $mac = preg_replace("/[:-]/","", $mac);
$version = preg_replace("/\./","",$version); //获取文件列表
function list_dir($dir){
$result = array();
if (is_dir($dir)){
$file_dir = scandir($dir);
foreach($file_dir as $file){
if ($file == '.' || $file == '..'){
continue;
}
elseif (is_dir($dir."/".$file)){
$result = array_merge($result, list_dir($dir."/".$file));
}
else{
array_push($result, $dir."/".$file);
}
}
}
return $result;
} //获取列表
$datalist=list_dir('./package');
// print_r($datalist);
// die();
$filename = "JD_".$mac."_".$version."_".$date.".zip"; //最终生成的文件名(含路径)
if(!file_exists($filename)){
//重新生成文件
$zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
if ($zip->open($filename, ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit('无法打开文件,或者文件创建失败');
} foreach( $datalist as $val){
if(file_exists($val)){ $zip->addFile($val, basename($val));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下
}
}
$zip->close();//关闭
} //即使创建,仍有可能失败。。。。
if(!file_exists($filename)){
exit("无法找到文件");
} header("Cache-Control: public");
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); } // echo $lowmd5;
?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件打包</title>
<link rel='icon' href='favicon.ico' type='image/x-ico'/>
<script src="extlib/jquery-1.11.1.min.js" type="text/javascript" charset="utf-8" ></script>
<script src="extlib/bootstrap-3.3.0/dist/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<script src="extlib/bootstrapValidator.min.js" type="text/javascript" charset="utf-8" ></script>
<!-- <scrip src="extlib/Angular.js" type="text/javascript" charset="utf-8"></script> -->
<script src="http://cdn.bootcss.com/angular.js/1.2.15/angular.min.js"></script>
<link rel="stylesheet" type="text/css" href="extlib/bootstrap-3.3.0/dist/css/bootstrap.min.css"> <div style="width:50%;margin:10 auto">
<!-- <div class="container"> -->
<form name="myForm" class="form-horizontal" method="post" action="filemd5.php" target="_self" ng-app="myApp" ng-controller="validateCtrl" novalidate>
<div class="form-group">
<label for="" class="col-sm-4 control-label">MAC地址:</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="mac" value="" ng-model="mac" placeholder="MAC地址" ng-pattern="/^([A-Za-z0-9]{2}[:-]){5}([A-Za-z0-9]{2})$/" required>
</div> <span ng-show="myForm.mac.$dirty && myForm.mac.$invalid && !myForm.mac.$error.required">mac地址格式错误</span>
<span ng-show="myForm.mac.$error.required && myForm.mac.$dirty">该项为必填项</span> </div>
<div class="form-group">
<label for="" class="col-sm-4 control-label">日期:</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="date" ng-model="date" value="" ng-pattern="/^\d{8}$/" placeholder="日期" required>
</div>
<span ng-show="myForm.date.$dirty && myForm.date.$invalid && !myForm.date.$error.required" nowrap>日期格式不正确.YYYYMMDD</span>
<span ng-show="myForm.date.$error.required && myForm.date.$dirty">该项为必填项</span>
</div> <div class="form-group">
<label for="" class="col-sm-4 control-label">版本号:</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="version" ng-model="version" value="" ng-pattern="/^V\d{1,2}.\d{1,2}.\d{1,2}$/" placeholder="版本号" required>
</div>
<span ng-show="myForm.version.$error.required && myForm.version.$dirty">该项为必填项</span>
<span ng-show="myForm.version.$dirty && myForm.version.$invalid && !myForm.version.$error.required">版本号错误.V2.0.03</span>
</div> <div class="form-group">
<div class="col-sm-offset-4 col-sm-2">
<button type="submit" class="btn btn-default" ng-disabled="myForm.$invalid">生成</button>
</div>
<div class="col-sm-3">
<button type="reset" class="btn btn-default">重新填写</button>
</div> </div> <?
if($tag=="success")
{
echo "<div class='form-group'>";
echo "<div id='download' class='col-sm-offset-8'>";
echo "<a class=\"btn btn-info\" href=\"$filename\" role=\"button\" ng-show=\"menuState\" ng-click=\"toggleMenu()\">点击下载</a>";
echo "</div>";
echo "</div>"; } ?> </form>
<!-- </div> -->
</div>
<script type="text/javascript">
var myApp = angular.module('myApp',[]); myApp.controller('validateCtrl',function($scope){ $scope.menuState = true; $scope.toggleMenu=function(){ $scope.menuState = false; } }) </script> </body>
</html>

ZipArchive 打包下载压缩包的更多相关文章

  1. .net 打包下载

      ZipArchive 打包下载 private IActionResult DownloadZipFromUrl(string[] guids,string zipFullName) { usin ...

  2. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...

  3. 使用PHP自带zlib函数 几行代码实现PHP文件打包下载zip

    <?php //获取文件列表 function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir ...

  4. PHP 多文件打包下载 zip

    <?php $zipname = './photo.zip'; //服务器根目录下有文件夹public,其中包含三个文件img1.jpg, img2.jpg, img3.jpg,将这三个文件打包 ...

  5. php打包下载以及断点续传

    php下载单文件 以及 多文件打包下载,支持断点续传 断点续传的功能未经验证 需要nginx或者apache服务器指定静态文件,png, mp4, zip等后缀文件的目录, 直接实例化并调用 down ...

  6. 2014年最新720多套Android源码2.0GB免费一次性打包下载

    之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...

  7. 开源 & 免费使用 & 打包下载自行部署 :升讯威 周报系统

    这个周报系统大约写于2015年,缘起当时所带的开发团队需要逐步建立或完善一些项目管理方法. 在调研了网上的诸多项目管理或周报/日报管理系统之后,并没有找到符合当时情况的系统,这里最大的问题不是网上既有 ...

  8. java 实现多文件打包下载

    jsp页面js代码: function downloadAttached(){ var id = []; id.push(infoid); var options = {}; options.acti ...

  9. PHP实现zip压缩打包下载

    先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...

随机推荐

  1. dubbo 学习总结

    1 Dubbo 配置 dubbo配置xml配置     属性配置  注解配置   api配置 注解配置 (+) (#) 服务提供方注解: import com.alibaba.dubbo.config ...

  2. Build to win!——获得小黄衫的感想

    UPDATE: 应栋哥要求,上传了无遮挡的正面照(我的内心其实是拒绝的!(ㄒoㄒ)) 一.前言&背景 从大一上C++课程开始,栋哥就开始安利他大三的软工实践课. 时间过得飞快,大学转眼就过去一 ...

  3. 《Linux菜鸟入门2》Ldap

    ldap网络帐号1.ldap是什么ldap目录服务认证,和windows活动目录类似,就是记录数据的一种方式 2.ldap客户端所需软件yum install sssd krb-workstation ...

  4. linux cat 的深入用法

    命令基于centos6系列,翻译基于官方原文的意思. catcat - concatenatefiles 1117.www.qixoo.qixoo.com and print on the stand ...

  5. python函数基础

    一.基础 函数的定义 def 函数名(参数): ... 函数体 ... 返回值 #如果函数执行完毕也没有return语句时,自动return None. 空函数 如果想定义一个什么事也不做的空函数,可 ...

  6. 如何使用alt键+数字键盘上的数字键打出特殊符号

    如何使用alt键+数字键盘上的数字键打出特殊符号 有时当我需要画示意图说明一个问题,但是苦于没有合适的符号,因此,这篇博文将简单介绍一些特殊的符号方便自己以及大家使用. 实现原理很简单:所有的字符(包 ...

  7. 自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)

    QQ:231469242 欢迎喜欢nltk朋友交流 http://www.cnblogs.com/undercurrent/p/4754944.html 一.信息提取模型 信息提取的步骤共分为五步,原 ...

  8. js随笔,css和js禁止网页选择文本,table的class样式使得td的class样式失效,jquery获得元素坐标

    css使用user-select,user-select不是W3C标准,浏览器支持不完整:user-select有两个值,none用户不可以选择文本,text用户可以选择文本 body{-moz-us ...

  9. Redis总结(一)Redis安装

    最近项目中需要使用Redis,刚好这两天有时间,便总结记录一下Redis的安装,以及如何在.NET中使用Redis. Redis是一个用的比较广泛的Key/Value的内存数据库.目前新浪微博.Git ...

  10. How to know if file is complete on the server using FTP

    This is a very old and well-known problem. There is no way to be absolutely certain a file being wri ...