PHP文件下载实例代码浅析


Posted in PHP onAugust 17, 2016

文件下载的功能对一个网站而言基本上是必备的了,今天就来看看PHP是如何实现文件下载的吧。

无控制类型

这里说的无控制类型是指 没有添加PHP代码控制的资源可以被直接下载的那些类型。一般而言,压缩文件.rar; 音视频文件:..avi等等也可以被直接下载。但是音频和mp4则会直接被浏览器解析播放。
如下图:

.avi文件

PHP文件下载实例代码浅析

.rar文件

PHP文件下载实例代码浅析

.mp4,MP3,图片等会被直接解析

PHP文件下载实例代码浅析

核心代码

使用php代码控制文件的下载合适很简单的。我们住需要很少的代码便可以完成如此复杂的工作。

类型

// 使用basename函数可以获得文件的名称而不是路径信息,保护了服务器的目录安全性
header("content-disposition:attachment;filename=".basename($filename));

长度

header("content-length:".filesize($filename));

实现函数

<?php

$filename = $_GET['filename'];
// 使用basename函数可以获得文件的名称而不是路径信息,保护了服务器的目录安全性
header("content-disposition:attachment;filename="$filename);
header("content-length:".filesize($filename));
readfile($filename);


?>

优化

上面指定文件名称的时候我们没有使用一个叫basename的函数,这样我们下载文件的时候将会连带着其在服务器上的文件的完整的路径。

注意: 下载文件的名称一定不能包含其在服务器上的完整路径名称,否则有可能会导致部分资源的泄露。即使有办法能控制访问资源的权限,但是使用basename函数也是很好的。 

原始下载文件的名称

PHP文件下载实例代码浅析

优化后的文件下载名称

PHP文件下载实例代码浅析

总结

php文件下载使用起来相较于Java实现真的是太方便了呢。在下载文件的内部,有许多的信息提供给我们,通过这些封装好的信息,我们可以实现更加优雅的文件下载系统。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php+oracle 分页类
Oct 09 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
PHP 函数学习简单小结
Jul 08 PHP
PHP入门学习笔记之一
Oct 12 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
PHP类相关知识点实例总结
Sep 28 PHP
PHP对象实例化单例方法
Jan 19 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
PHP Ajax实现无刷新附件上传
Aug 17 #PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 #PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 #PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 #PHP
总结PHP中数值计算的注意事项
Aug 14 #PHP
示例详解Laravel的注册重构
Aug 14 #PHP
PHP实现路由映射到指定控制器
Aug 13 #PHP
You might like
使用PHP Socket写的POP3类
2013/10/30 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
浅说js变量
2011/05/25 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python的id()函数解密过程
2012/12/25 Python
python连接池实现示例程序
2013/11/26 Python
python实现的系统实用log类实例
2015/06/30 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
python 读入多行数据的实例
2018/04/19 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
Django的models中on_delete参数详解
2019/07/16 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
工作散漫检讨书
2014/09/16 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
学校施工安全责任书
2015/01/29 职场文书
电影红河谷观后感
2015/06/11 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS