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

      最近用codeigniter开发一个图片网站,发现单文件下载很容易实现,批量下载的话,就有点麻烦。

      普通php下载比较简单,比如我封装的一个函数:

    function shao_download($filename = '', $file_path = '')
    {
        $fp=fopen($file_path,"r");
        $file_size=filesize($file_path);
        //下载文件需要用到的header
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length:".$file_size);
        Header("Content-Disposition: attachment; filename=".$filename);
        $buffer=1024;
        $file_count=0;
        //向浏览器返回数据
        while(!feof($fp) && $file_count<$file_size){
          $file_con=fread($fp,$buffer);
          $file_count+=$buffer;
          echo $file_con;
        }
        fclose($fp); 
    }

      

      以下是参考网上的例子,编写的一个多文件下载测试文件,遇到同样问题而不知道如何处理的朋友们可以参考下。

      思路如下:

      ① 把要下载的图片信息组合到$imgs数组中

      ② 把要下载的图片打包成zip压缩包

      ③ 下载压缩包,删除服务器上的临时zip文件

    <?php
    $imgs[] = 'http://demo.pic.com/column_f/large/IMG_Af8P_15.jpg';
    $imgs[] = 'http://demo.pic.com/column_f/large/IMG_l89P_08.jpg';
    
    $filename = 'tmp.zip';
    
    $zip = new ZipArchive();
    $zip->open($filename, ZipArchive::OVERWRITE);
    
    foreach ($imgs as $key=>$vo) {
        $fileData = file_get_contents($vo);
        if ($fileData) {
            $zip->addFromString($key.'.jpg', $fileData);
        }
    }
    
    
    $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=imgages.zip");
    //一次只传输1024个字节的数据给客户端
    $buffer = 1024; //
    while (!feof($file)) {
        //将文件读入内存
        $file_data = fread($file, $buffer);
        //每次向客户端回送1024个字节的数据
        echo $file_data;
    }
    fclose($file);
    unlink($filename); //删除文件
  • 相关阅读:
    Centos7创建CA和申请证书 转自https://www.cnblogs.com/mingzhang/p/8949541.html
    go-micro介绍 摘自https://www.cnblogs.com/s0-0s/p/6874800.html
    docker centos7创建consul镜像以及用docker-compose启动镜像
    今天想用jquery来实现div的拖放功能
    canvas
    子元素的div不继承父元素的透明度
    BOM
    DOM
    JS的循环、复杂运算符
    梳理一下JS的基本语法
  • 原文地址:https://www.cnblogs.com/shaoyikai/p/3755079.html
Copyright © 2011-2022 走看看