PHP基础文件下载类的简单封装
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基础文件下载类的简单封装的更多相关文章
- 关于Spring-JDBC测试类的简单封装
关于Spring-JDBC测试类的简单封装 1.简单封装 /** * Created with IntelliJ IDEA. * * @Author: Suhai * @Date: 2022/04/0 ...
- web自动化框架—BasePage 类的简单封装
优秀的框架都有属于自己的思想,在搭建web自动化测试框架时,我们通常都遵循 PO(Page Object)思想. 简单理解就是我们会把每个页面看成一个对象,一切皆对象,面向对象编码,这样会让我们更好的 ...
- 初学JDBC,JDBC工具类的简单封装
//工具类不需要被继承 public final class JdbcUtils{ //封装数据库连接参数,便于后期更改参数值 private static String url="jdbc ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
- swift开发之--简单封装Alamofire请求类以及简单使用SnapKit
以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- 使用泛型简单封装NGUI的ScrollView实现滑动列表
懒,是老毛病了,周末跑了半马,跑完也是一通累,好久没锻炼了..也是懒的,有时都懒的写博客..最近看到项目中各种滑动列表框,本着要懒出水平来的原则,决定花点时间简单处理下(暂时未做列表太多时的优化):1 ...
- Google图片加载库Glide的简单封装GlideUtils
Google图片加载库Glide的简单封装GlideUtils 因为项目里用的Glide的地方比较多,所有简单的封装了以下,其实也没什么,就是写了个工具类,但是还是要把基础说下 Glide的Githu ...
随机推荐
- 【翻译自nikic大神】PHP中原生类型的方法
引言 第一次,翻译别人的文章,用四级英语的水平来翻译~~囧,可能有很多不太恰当的地方,尽管拍砖(有些地方实在想不到恰当的翻译,我同时贴出了原文和自己很low的翻译). 翻译这篇文章用了我3个晚上一个中 ...
- 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 2 Random sampling with and without replacement
Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...
- 《JavaScript权威指南》学习笔记 第七天 DOM操作
由衷的觉得,随着IT技术的广泛的运用,个人电脑以及智能手机的使用,信息的获取与传播更为简单.但是我们获取有用信息的难度相反是越来越大了,想要保持住自己的注意力越来越难了.除了吃饭睡觉,我的精力都在电脑 ...
- 《JavaScript权威指南》学习笔记 第二天 下好一盘大棋
前段学习js的时候总是零零散散的,以至于很多东西都模棱两可.时间稍微一久,就容易忘记.最主要的原因是这些东西,原来学的时候就不是太懂,以至于和其他知识无法形成记忆链,所以孤零零的知识特别容易忘记.重温 ...
- JS方法集
数组方法集 Angela.array = { //# 数组方法 // index, 返回位置! 不存在则返回 -1: index: function (t, arr) { //# 返回当前值所在数组的 ...
- javascript 未来新方法的介绍
JavaScript1.6数组方法的扩展 var tmp = [1, 2, 3, 4, 5, 3]; console.log('indexOf:找出数组中某一对象的下标,如果没有则为-1'); con ...
- spring+hibernate ---laobai
biz包: package com.etc.biz; import java.util.List; import org.springframework.orm.hibernate3.support. ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误:
- MongoDb学习1
目标框架必须是 4.5以上,最新MongoDb.Driver 是 2.2.4(与MongoDb.Driver 的1.x版本差别较大) 官方文档 http://mongodb.github.io/mon ...
- 9月20日下午JavaScript函数--递归
例题1:公园里有200个桃子,猴子每天吃掉一半以后扔掉一个,问6天以后还剩余多少桃子? var sum = 200; for(var i= 0;i<6;i++) { sum = parseInt ...