文件压缩/下载 前后端

html端页面

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<a href="data.php">设备上报日志</a>
<!--<a href="test.php">设备上报日志</a>-->
</body>
</html>

php页面

<?php
//zip之压缩目录与文件
function addFileToZip($path,$zip){
    $handler=opendir($path); //打开当前文件夹由$path指定。
    while($filename=readdir($handler)){
        if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if(is_dir($path. DIRECTORY_SEPARATOR.$filename)){// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path. DIRECTORY_SEPARATOR.$filename, $zip);
            }else{ //将文件加入zip对象
                if($filename=='zy.exe'){
                    $zip->addFile($path.DIRECTORY_SEPARATOR.$filename,$path.DIRECTORY_SEPARATOR.iconv("GBK", "UTF-8",'中用软件.exe'));//该函数第二个参数是可选的,用来指定文件的名称,如果不选,则用basename()来代替
                }else{
                    $zip->addFile($path.DIRECTORY_SEPARATOR.$filename);//该函数第二个参数是可选的,用来指定文件的名称,如果不选,则用basename()来代替
                }
            }
        }
    }
    $zip->deleteName('zy.exe');//删除压缩包中指定名称的文件
    @closedir($path);//关闭打开的目录
}
$zip=new ZipArchive();
if($zip->open('设备上报日志.zip', ZipArchive::OVERWRITE|ZipArchive::CREATE)=== TRUE){//如果只用ZipArchive::OVERWRITE那么如果指定目标存在的话就会复写,否则返回错误9,而两个都用则会避免这个错误
    addFileToZip('log', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法,注意"\"是转移字符,"/"不是
    $zip->close(); //关闭处理的zip文件 !!!!!!先关闭ZIP对象 再调下载 否则有问题 这里要注意
    downfile('设备上报日志.zip');
    
}

//下载
function downfile($dirName){
    $filename=realpath($dirName); //文件名
    $date=date("Ymd-H:i:m");
    Header( "Content-type: application/octet-stream ");
    Header( "Accept-Ranges: bytes ");
    Header( "Accept-Length: " .filesize($filename));
    header( "Content-Disposition: attachment; filename= {$dirName}");
    echo file_get_contents($filename);
    @readfile($filename);
    @unlink($filename);//删除打包的临时zip文件。文件会在用户下载完成后被删除
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值