zoukankan      html  css  js  c++  java
  • php 批量下载文件

    public function batchDownload()
        {
            $filename = 'tmp.zip';
            $zipName = date('YmdHi') . '.zip';
            $files = 'xxxx';//文件列表
            $zip = new ipArchive();
            $zip->open($filename, ipArchive::CREATE | ipArchive::OVERWRITE);
            $folder = base_path();//保存时需要去掉的父级文件夹
            foreach ($files as $item) {
                $filepath = base_path() . '/storage/' . $item['object_path'];
                //判断路径是否存在
                if (!is_file($filepath) || !file_exists($filepath)) {
                    continue;
                }
                $filepath = str_replace('\', '/', $filepath);
                $folder = str_replace('\', '/', $folder);
    
                if (is_dir($filepath) === true) {
                    $files = new RecursiveDirectoryIterator($filepath, RecursiveIteratorIterator::SELF_FIRST);
                    foreach ($files as $file) {
    
                        $file = str_replace('\', '/', $file);
                        if(in_array(substr($file, strrpos($file, '/') + 1), array('.', '..')))
                            continue;
                        if (is_dir($file) === true) {
                            $zip->addEmptyDir(str_replace($folder . '/', '', $file . '/'));
                        } else if (is_file($file) === true) {
                            $zip->addFromString(str_replace($folder . '/', '', $file), file_get_contents($file));
                        }
                    }
    
                } else if (is_file($filepath) === true) {
                    $zip->addFromString(basename($filepath), file_get_contents($filepath));
                }
                //$zip->addFile($filepath);
    
            }
    
            $zip->close();
    
            $file = fopen($filename, "r");
            Header("Content-type: application/octet-stream");
            Header("Accept-Ranges: bytes");
            Header("Accept-Length: " . filesize($filename));
            Header("Content-Disposition: attachment; filename=" . $zipName);
            while (!feof($file)) {
                fpassthru($file); // 输出至浏览器
                fclose($file);
                unlink($filename); //删除临时文件
                exit;
            }
        }
  • 相关阅读:
    JDK14的新特性:JFR,JMC和JFR事件流
    java深入理解浅拷贝和深拷贝
    jcmd:JDK14中的调试神器
    你真的了解java class name吗?
    JDK14中的java tools简介
    JDK 14的新特性:switch表达式
    JDK 14的新特性:文本块Text Blocks
    java中的内部类内部接口详解
    一文弄懂String的所有小秘密
    深入理解java的泛型
  • 原文地址:https://www.cnblogs.com/pcx105/p/10620067.html
Copyright © 2011-2022 走看看