• 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

  • 相关阅读:
    "开关"组件:<h-switch> —— 快应用组件库H-UI
    "范围选择器"组件:<range> —— 快应用组件库H-UI
    "滑动选择器"组件:<h-slider> —— 快应用组件库H-UI
    "星级评分"组件:<rate> —— 快应用组件库H-UI
    "价格"组件:<price> —— 快应用组件库H-UI
    "长整数"组件:<long> —— 快应用组件库H-UI
    javaweb简单的学生信息录入系统
    java简单验证码生成程序
    请写一个java类,在任何时候都可以向它查询“你已经创建了多少个对象?”
    java静态初始化块的执行顺序
  • 原文地址:https://www.cnblogs.com/pdandan/p/8269056.html
Copyright © 2020-2023  润新知