文件下载出错

来源:2-11 文件下载函数封装

倚松听花语

2017-11-29 00:30:51

老师,为什么下载一半报错了?下载源是没问题的,可以正常解压。

http://img.mukewang.com/climg/5a1d8eb400018d5d03490182.jpg

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格式编码保存 你捣鼓了试试

0

imooc_澈

2017-11-29

您好,小慕用您的代码在本地尝试,下载函数是没有问题的,没有出现您所述的状况,您检查一下是不是文件访问路径的问题。

0

0 学习 · 2569 问题

查看课程