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