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编写PDF文档生成器
Oct 09 PHP
多数据表共用一个页的新闻发布
Oct 09 PHP
php htmlspecialchars加强版
Feb 16 PHP
Apache服务器无法使用的解决方法
May 08 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
php单一接口的实现方法
Jun 20 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
laravel框架中间件简单使用方法示例
Jan 25 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 Memcache 中实现消息队列
2009/11/24 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
关于jquery css的使用介绍
2013/04/18 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
python获取网页状态码示例
2014/03/30 Python
python字符串连接方式汇总
2014/08/21 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
python构建自定义回调函数详解
2017/06/20 Python
python连接数据库的方法
2017/10/19 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
Python 实现简单的客户端认证
2020/07/29 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
车间主管岗位职责
2013/11/14 职场文书
运动会班级口号
2014/06/09 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
初中政治教学反思
2016/02/23 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python