1: <?php

   2: /**

   3:  * [FileDown 公用文件下载方法]

   4:  * @param [type] $filePath [文件路径(绝对路径或相对路径)]

   5:  */

   6: function FileDown($filePath)

   7: {

   8:     //由于php中的文件函数默认只支持gb2312编码的中文,这里使用iconv()函数转码为GB2312编码

   9:     $filePath = iconv("UTF-8", "GB2312//IGNORE", $filePath);

  10:  

  11:     //检测文件是否存在:

  12:     if(!file_exists($filePath)){

  13:         die("文件不存在!");

  14:     }

  15:  

  16:     //打开文件:

  17:     $file = @fopen($filePath, "r");

  18:  

  19:     // 获取文件大小

  20:     $fileSize = filesize($filePath);

  21:     

  22:     //获取文件名

  23:     $fileName =get_basename($filePath);

  24:  

  25:  

  26:     //添加响应头信息

  27:     header("Content-Type: application/octet-stream");//返回类型:二进制文件流

  28:     header("Accept-Ranges: bytes");    //告诉客户端以字节数组接受

  29:     header("Accept-Length: $fileSize");    //告诉客户端需要接受的文件大小

  30:     header("Content-Disposition: attachment; filename=".$fileName);//设置下载对话框中显示的文件名

  31:  

  32:     //循环读取指定大小的文件数据返回给客户端

  33:     $buffer=1024;

  34:     $sendCount=0;

  35:     while (!feof($file)&&($fileSize-$sendCount>0)) {

  36:         $sendCount+=$buffer;

  37:         echo fread($file, $buffer);//每次读取1024字节的文件数据返回给客户端

  38:     }

  39:  

  40:     // 关闭文件流

  41:     fclose($file);

  42: }

  43:  

  44: //根据文件路径获取文件的扩展名

  45: function get_extension($filePath)

  46: {

  47:     return pathinfo($filePath, PATHINFO_EXTENSION);

  48: }

  49:  

  50: //根据文件路径获取文件名

  51: function get_basename($filePath)

  52: {

  53:     //使用正则表达式将文件名之前的内容替换为"",返回结果

  54:     return preg_replace('/^.+[\\\\\\/]/', '', $filePath);

  55: }

  56:  

  57: ?>

调用示例:

   1: <?php

   2:     //添加引用

   3:     require_once("FileDownService.php");

   4:  

   5:     //设置客户端页面编码

   6:      header("Content-Type:text/html; charset=utf-8");

   7:  

   8:     //从Request中取出fiLeName参数

   9:     if(isset($_REQUEST["fileName"]))

  10:     {

  11:         //设置文件的绝路径

  12:         $filePath = $_SERVER["DOCUMENT_ROOT"]."/downfiles/".$_REQUEST["fileName"];

  13:  

  14:         //调用文件下载方法进行下载

  15:         FileDown($filePath);

  16:     }

  17:  

  18: ?>

PHP基础文件下载类的简单封装的更多相关文章

  1. 关于Spring-JDBC测试类的简单封装

    关于Spring-JDBC测试类的简单封装 1.简单封装 /** * Created with IntelliJ IDEA. * * @Author: Suhai * @Date: 2022/04/0 ...

  2. web自动化框架—BasePage 类的简单封装

    优秀的框架都有属于自己的思想,在搭建web自动化测试框架时,我们通常都遵循 PO(Page Object)思想. 简单理解就是我们会把每个页面看成一个对象,一切皆对象,面向对象编码,这样会让我们更好的 ...

  3. 初学JDBC,JDBC工具类的简单封装

    //工具类不需要被继承 public final class JdbcUtils{ //封装数据库连接参数,便于后期更改参数值 private static String url="jdbc ...

  4. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  5. .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类

    引言 由公司需要使用dapper  同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions  并配套 生成实体类小工具的方 ...

  6. swift开发之--简单封装Alamofire请求类以及简单使用SnapKit

    以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...

  7. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

  8. 使用泛型简单封装NGUI的ScrollView实现滑动列表

    懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...

  9. Google图片加载库Glide的简单封装GlideUtils

    Google图片加载库Glide的简单封装GlideUtils 因为项目里用的Glide的地方比较多,所有简单的封装了以下,其实也没什么,就是写了个工具类,但是还是要把基础说下 Glide的Githu ...

随机推荐

  1. cantor三分集

    值得一提的是,第一次听说cantor三分集是在数字电路课上,然而数电是我最不喜欢的课程之一...... 分形大都具有自相似.自仿射性质,所以cantor三分集用递归再合适不过了,本来不想用matlab ...

  2. java.io.IOException: No FileSystem for scheme: hdfs

    在这篇文章中,介绍了如何将Maven依赖的包一起打包进jar包.使用maven-assembly打成jar后,将这个jar提供给其他工程引用的时候,报出如下错误: log4j:WARN No appe ...

  3. Ubuntu回收站

    以前删除文件经常Move to trash,今天想清空发现根本不知道回收站在哪里,囧.遂Google之,于是发现在 -/.local/share/Trash目录下. 打开目录看看有什么东西: ➜ ~ ...

  4. 画虚线 iOS

    整理了一个方法,可以直接绘制虚线,下面直接上代码.参数说明已经给出,可直接copy使用 /** ** lineView: 需要绘制成虚线的view ** lineLength: 虚线的宽度 ** li ...

  5. centos6.5下安装mysql

    http://www.centoscn.com/mysql/2014/0812/3481.html 1.使用yum命令安装mysql [root@bogon ~]#  yum -y install m ...

  6. SaltStack之Job管理和Runner(八)

    SaltStack之Job管理和Runner 配置文件/etc/salt/master cachedir: /var/cache/salt/master # cache路径 keep_jobs: 24 ...

  7. jquery的$.extend()、$.fn和$.fn.extend()

    一种是类级别的插件开发,即给jquery添加新的全局函数,相当于给jquery类本身添加方法.如$.ajax()等,这就是用$.extend()实现 jquery的全局函数就是属于jquery命名空间 ...

  8. 2016 年 Python 开发者调查结果

    1.在团队中工作 vs 独立工作 有趣的是,半数的受访者大部分时间在团队中工作,而另外半数的受访者则独立的做项目. 在公司中工作 vs 独立从事自己的项目 大约80%的受访者告诉我们,他们在公司里面工 ...

  9. 基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

    首先确保系统可以联网.设置IP地址以及虚拟机安装linux在此略过.本文采用centos6.7 64位minimal版.php5.6.16.httpd-2.4.18.mysql-5.5.47版搭建la ...

  10. <摘录>如何在64位linux强制编译32位应用程序

    GDC注:因为需要解决在linux64机上编译32位的mongodb(没办法,因为编译的php是32位,然后我想将mongdb扩展添加到php中),在网上搜了很多文章,感觉这篇好懂,而且好用.我使用的 ...