- A+
所属分类:PHP
文件下载
- //文件下载函数封装
- function down_file(string $filename,array $allowDownExt=['jpg','png','jpeg','txt','zip','gz']){
- //检测下载文件是否存在,并且可读
- if(!is_file($filename)||!is_readable($filename)){
- return false;
- }
- //检测文件类型是否运行下载
- //strtolower,转小写
- //pathinfo 返回文件路径的信息,有一个可选参数,参数包含四个内容,本次使用的是获取扩展名
- $ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
- //判断要下载内容的扩展是否在数组中
- if (!in_array($ext,$allowDownExt)){
- return false;
- }
- //通过header()发送头信息
- //告诉浏览器输出的是字节流
- header('content-type:application/octet-stream');
- //告诉浏览器返回的文件大小是按字节进行计算的
- header('Accept-Ranges:bytes');
- //告诉浏览器返回的文件大小
- header('Accept-Length'.filesize($filename));
- //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
- header('Content-Dispostion:attachment;filename='.basename($filename));
- //读取文件中的内容
- echo readfile($filename);
- exit;
- }
切片下载
- //文件切片下载函数封装
- function down_file1(string $filename,array $allowDownExt=['jpg','png','jpeg','txt','zip','gz']){
- //检测下载文件是否存在,并且可读
- if(!is_file($filename)||!is_readable($filename)){
- return false;
- }
- //检测文件类型是否运行下载
- //strtolower,转小写
- //pathinfo 返回文件路径的信息,有一个可选参数,参数包含四个内容,本次使用的是获取扩展名
- $ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
- //判断要下载内容的扩展是否在数组中
- if (!in_array($ext,$allowDownExt)){
- return false;
- }
- //通过header()发送头信息
- //告诉浏览器输出的是字节流
- header('content-type:application/octet-stream');
- //告诉浏览器返回的文件大小是按字节进行计算的
- header('Accept-Ranges:bytes');
- $filesize =filesize($filename);
- //告诉浏览器返回的文件大小
- header('Accept-Length'.$filesize);
- //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
- header('Content-Dispostion:attachment;filename='.basename($filename));
- //规定每次读取文件的字节数为1024字节,直接输出数据
- $read_buffer=1024;
- $sum_buffer=0;
- $handle = fopen($filename,'rb');
- while (!feof($handle) && $sum_buffer < $filesize){
- echo fread($handle,$read_buffer);
- $sum_buffer+=$read_buffer;
- }
- fclose($handle);
- exit;
- }