文件下载出错
来源: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
您好,小慕用您的代码在本地尝试,下载函数是没有问题的,没有出现您所述的状况,您检查一下是不是文件访问路径的问题。
相似问题