php批量下载文件

时间:2021-01-04 09:53:58

  最近用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); //删除文件