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 使用MySQL管理Session的回调函数详解
Jun 21 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
php微信开发之关注事件
Jun 14 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 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使用DES进行加密与解密的方法详解
2013/06/06 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
js function使用心得
2010/05/10 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
vue实现分页组件
2020/06/16 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
python正则表达式之对号入座篇
2018/07/24 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
python 使用shutil复制图片的例子
2019/12/13 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
《美丽的彩虹》教学反思
2014/02/25 职场文书
公开承诺书格式
2014/05/21 职场文书
党员自我剖析材料
2014/08/31 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书