PHP读取excel中地址实现多文件下载
程序员文章站
2022-06-27 19:32:58
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内容如下图所示:
打包过程参考:https://www.cnblogs.com/shaoyikai/p/3755079.html