文件下载出错
来源:2-11 文件下载函数封装
倚松听花语
2017-11-29 00:30:51
老师,为什么下载一半报错了?下载源是没问题的,可以正常解压。

fileFunc.php
function down_file(string $filename,array $allowDownExt=array('jpg','jpeg','gif','txt','png','html','rar','zip'))
{
$result = false;
//检测下载文件是否存在,并且可读
if(is_file($filename) && is_readable($filename))
{
//检测文件类型是否允许下载
$ext = strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if(in_array($ext,$allowDownExt))
{
//通过header()发送头信息
//告诉浏览器发送的是字节流
header('Content-Type:application/octet-stream');
//告诉浏览器返回的文件大小是按照字节进行计算的
header('Accept-Ranges:bytes');
//告诉浏览器返回的文件大小
$filesize = filesize($filename);
header('Accept-Length:'.$filesize);
//告诉浏览器以附件形式来处理文件,告诉浏览器最终下载完的文件名称
header('Content-Disposition:attachment;filename='.basename($filename));
//读取文件的内容
// readfile($filename);
//规定每次读取文件的字节数为1024字节,直接输出数据
$read_buffer = 1024;
$sum_buffer = 0;
$handel = fopen($filename,'rb');
while(!feof($handle) && $sum_buffer<$filesize){
fread($handle,$read_buffer);
$sum_buffer += $read_buffer;
}
fclose($filename);
$result = true;
}
}
return $result;
}downLoad.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>测试下载</title> </head> <body> <a href="download.php?filename=1.zip">下载1.zip</a> <br> <a href="download.php?filename=2.zip">下载2.zip</a> <br> <a href="download.php?filename=3.zip">下载3.zip</a> </body> </html>
downLoad.php
<?php require_once 'fileFunc.php'; $filename = $_GET['filename']; down_file($filename);
2回答
啊临
2017-11-29
这代码写的挺好啊,我也试了 跟助教一样 给你查了一下 https://zhidao.baidu.com/question/1509733018763438620.html 说是有可能跟php源码保存的格式有关系 要用UTF-8 无ROM格式编码保存 你捣鼓了试试
imooc_澈
2017-11-29
您好,小慕用您的代码在本地尝试,下载函数是没有问题的,没有出现您所述的状况,您检查一下是不是文件访问路径的问题。
相似问题