PHP读取excel中地址实现多文件下载

pdandan 2018-01-11 原文

PHP读取excel中地址实现多文件下载

PHP文件下载有单文件和多文件之分,如果是单文件写个方法可以实现,但是如果想循环下载多个文件我试验是没有成功。先说单文件的下载,方法如下:

 1 function downfile($fileurl) {  
 2         $filenameexplode=explode('/',$fileurl);
 3         $fileRealName=$filenameexplode[count($filenameexplode)-1];
 4         $filename=$fileurl;
 5         $file  =  fopen($filename, "rb");
 6         Header( "Content-type:  application/octet-stream ");   
 7         Header( "Accept-Ranges:  bytes ");   
 8         Header( "Content-Disposition:  attachment;  filename= ".$fileRealName);   
 9         $contents = "";  
10         while (!feof($file)) {  
11              $contents .= fread($file, 8192);  
12         }  
13         echo $contents;  
14         fclose($file);   
15     }  

如果是多个文件,可以采用压缩下载的方式进行下载,以下代码是读取excel中文件地址并打包下载的源码:

 1 set_time_limit(0);
 2 ini_set("max_execution_time", 0);
 3 ini_set("memory_limit", "1G");
 4 require_once 'Excel/PHPExcel/IOFactory.php';
 5 $filePath ='pdforimg.xlsx';
 6 $fileType = PHPExcel_IOFactory::identify($filePath);
 7 $objReader = PHPExcel_IOFactory::createReader($fileType);
 8 $objPHPExcel = $objReader->load($filePath);
 9 
10 $sheet = $objPHPExcel->getSheet(0); // 读取第一個工作表
11 
12 $arr = $objPHPExcel->getActiveSheet()->toArray();
13 foreach($arr as $k=>$v){
14     if($k>=2){
15         foreach($arr[0] as $kk=>$vv){
16             $isnull=str_replace(' ','',$v[0]);
17             if(!($isnull) || $isnull=="  "){
18                 break;
19             }
20             $data[$k-2][$arr[0][$kk]]=$v[$kk];
21         }
22     }
23 }
24 
25 $filename = 'tmp.zip';
26 
27 $zip = new ZipArchive();
28 $zip->open($filename, ZipArchive::OVERWRITE);
29 
30 foreach ($data as $key=>$vo) {
31     if($key>=1000 && $key<1500){
32         $filenameexplode=explode('/',$vo['url']);
33         $fileRealName=$filenameexplode[count($filenameexplode)-1];
34         $fileData = file_get_contents($vo['url']);
35         if ($fileData) {
36             $zip->addFromString($fileRealName, $fileData);
37         }
38     }
39 
40 }
41 
42 
43 $zip->close();
44 
45 $file = fopen($filename, "r");
46 Header("Content-type: application/octet-stream");
47 Header("Accept-Ranges: bytes");
48 Header("Accept-Length: " . filesize($filename));
49 Header("Content-Disposition: attachment; filename=pdf.zip");
50 //一次只传输1024个字节的数据给客户端
51 $buffer = 1024; //
52 while (!feof($file)) {
53     //将文件读入内存
54     $file_data = fread($file, $buffer);
55     //每次向客户端回送1024个字节的数据
56     echo $file_data;
57 }
58 fclose($file);
59 unlink($filename);

excel内容如下图所示:

打包过程参考:https://www.cnblogs.com/shaoyikai/p/3755079.html

 

发表于 2018-01-11 16:25 pdandan 阅读() 评论() 编辑 收藏

 

版权声明:本文为pdandan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/pdandan/p/8269056.html

PHP读取excel中地址实现多文件下载的更多相关文章

  1. PHP面试题

    mysql 存储引擎mysam和innodb 的区别?1.myisam 存储引擎的特点 表级锁不支持事务和全文索引。2.innodb 存储引擎的特点 行级锁支持事务,支持外键,不支持fulltext类型索引。3.mysql 表级锁有两...

  2. PHP运算符优先级 运算符分类

    运算符 运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式) […]...

  3. Deformity PHP Webshell、Webshell Hidden Learning

    Deformity PHP Webshell、Webshell Hidden Learning 1. 引言 本 […]...

  4. PHP 自定义二维码生成

    环境:PHP 7.*.* ,Composer 包管理工具、QrCode 效果如下:   使用 Composer […]...

  5. PHP 通过APP包名爬取goole商店素材

    PHP 通过APP包名爬取goole商店素材   一, 实验目的:通过APP 包名爬取goole商店素材   […]...

  6. Hyperf-事件机制+异常处理

    Hyperf-事件机制+异常处理 标签(空格分隔): php, hyperf 异常处理器 在 Hyperf 里 […]...

  7. js的快速搜索

      公司这几天项目很紧张,然后一直有各种乱七八糟的事,突然说要整个搜索的功能,第一时间想到的就是用php的模糊 […]...

  8. 正则表达式贪婪与非贪婪比较

    不多废话,直接上例子 用最近写的一个php正则测试程序进行举例: 1.首先是贪婪模式( a+ ): 对于字符串 […]...

随机推荐

  1. bootstrap改变上传文件按钮样式,并显示已上传文件名

    参考博文:   html中,文件上传时使用的<input type="file">的样式自定义 h […]...

  2. 正则表达式–相关应用

    最近有很多朋友在问关于正则表达式的一些知识,所以在这里统一给大家回复一下,为了直接方便就忍了,没有截图,视觉效 […]...

  3. MyBatis(9)整合spring

    具体的感兴趣可以参考:MyBatis   此时此刻,没用的话不在进行多说了,直接开始代码工程吧!   整体的代 […]...

  4. fiddle python抓取微信公众号文章

    分析 1,先进行准备工作:使用fiddle抓包(大家可以自行百度怎么使用哦)2,打开电脑端微信,找到需要爬取的 […]...

  5. jdbc链接数据库

      JDBC简介 JDBC全称为:Java Data Base Connectivity (java数据库连接 […]...

  6. 一步一步剖析Dictionary实现原理

      本文是对c#中Dictionary内部实现原理进行简单的剖析。如有表述错误,欢迎指正。   主要对照源码来 […]...

  7. STM32嵌入式开发学习笔记(一)

    本文中,笔者将介绍使用嵌入式开发工具Keil uVision5,使用C语言,对微处理器STM32F103C8进 […]...

  8. python Django编写接口并用Jmeter测试

    一、环境准备   python3.6.7   Pycharm 二、创建项目   我这里是在Django项目中新 […]...

展开目录

目录导航