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存储过程的方法
Sep 12 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 PHP
使用php计算排列组合的方法
Nov 13 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
PHP SOCKET编程详解
May 22 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
php实现留言板功能
Mar 05 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 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
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
说一说Python logging
2016/04/15 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
用Python实现读写锁的示例代码
2018/11/05 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
python的faker库用法
2019/11/28 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
python 如何上传包到pypi
2020/12/24 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
爱祖国爱家乡演讲稿
2014/09/02 职场文书
学习教师法的心得体会
2014/09/03 职场文书
2014年大学教师工作总结
2014/12/02 职场文书