php批量下载文件
2014-02-11 20:17
106 查看
header使用后会终止HTTP请求,所以不能使用header批量下载文件,这里使用打包的方法,这个过程中将使用到 ZipArchive 这个类,需要linux安装zlib扩展,windows需取消php_zip.dll前的注释
注意:zip文件可以放在tmp文件下,这个文件夹有777权限
$pic_path = 'http://www.baidu.com'; $qrList = array( array( 'data'=>array( 'id'=>1, 'source'=>'qrCodeSale1' ), ), array( 'data'=>array( 'id'=>2, 'source'=>'qrCodeSale2' ), ), array( 'data'=>array( 'id'=>3, 'source'=>'qrCodeSale3' ), ), ); $filename = '/tmp/batchQrCodeDownload.zip'; $zip = new ZipArchive(); $zip->open($filename, ZipArchive::OVERWRITE); $zip->addEmptyDir('images'); //增加一个目录的原因是,如果zip包没东西会一直下载,永不停止 foreach ($qrList as $value) { $fileData = file_get_contents($pic_path . '/' . $value['data']['source'] . '/' . $value['data']['source'] . '_' . $value['data']['id'] . '.jpg'); if ($fileData) { $zip->addFromString('images/' . $value['data']['source'] . '.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=batchQrCodeDownload.zip"); //一次只传输1024个字节的数据给客户端 //向客户端回送数据 $buffer = 1024; // //判断文件是否读完 while (!feof($file)) { //将文件读入内存 $file_data = fread($file, $buffer); //每次向客户端回送1024个字节的数据 echo $file_data; } fclose($file); unlink($filename); //删除文件
注意:zip文件可以放在tmp文件下,这个文件夹有777权限
1 | 如果使用addFile指定的文件必须在当前目录或者当前子目录下,如果使用远程文件可以通过addFromString方法 |
2 | zip包中不能为空,所以为了避免文件获取不到,可以添加一个目录 |
3 | 不要使用远程文件,会导致文件一直写,永不停止 |
相关文章推荐
- php实现文件的批量下载(Windows,Linux,Unix通用)
- PHP/ThinkPHP实现批量打包下载文件的方法示例
- php实现网站文件批量压缩下载功能
- PHP批量查询数据库下载远程文件脚本实例
- php实现批量下载百度云盘文件例子分享
- php实现批量下载百度云盘文件例子分享
- php实现网站文件批量压缩下载功能
- php文件批量下载
- java将文件批量打包后并下载
- php文件下载
- PHP实现文件上传与下载
- 【转】php 下载保存文件保存到本地的两种实现方法
- php -- 文件上传下载
- 如何利用GCD Group批量下载文件
- http文件批量多线程下载之winform
- python批量下载兰科植物网站的图片,并重命名文件
- PHP 弹出文件下载
- PHP之HEADER隐藏文件下载路径
- 批量打包 下载文件
- 如何批量将报表导成excel文件并打包下载