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;
            }
        }
  • 相关阅读:
    数据库中的LEFT JOIN 个人理解
    C++ 类的继承方式
    KMP字符串匹配算法
    C++ 运算符重载_加号
    Pin API INS
    Python 爬虫爬取多页数据
    Pin
    NO.12 13 章 字符串&扩展(哈希、KMP、分块、BIT)
    NO.11章 DP(递归递推、最大连续子序列和、LIS、LCS、最长回文子串、DAG、背包)
    NO.10章 图(遍历、最短路、生成树、拓扑、关键路径)
  • 原文地址:https://www.cnblogs.com/pcx105/p/10620067.html
Copyright © 2011-2022 走看看