欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 17:42:05
PHP文件下载有单文件和多文件之分,如果是单文件写个方法可以实现,但是如果想循环下载多个文件我试验是没有成功。先说单文件的下载,方法如下: 如果是多个文件,可以采用压缩下载的方式进行下载,以下代码是读取excel中文件地址并打包下载的源码: excel内容如下图所示: 打包过程参考:https:// ......

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内容如下图所示:PHP读取excel中地址实现多文件下载

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