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 相关文章推荐
一个取得文件扩展名的函数
Oct 09 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
php命令行用法入门实例教程
Oct 27 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
php实现断点续传大文件示例代码
Jun 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 生成随机验证码图片代码
2010/02/08 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
Laravel find in set排序实例
2019/10/09 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
js实现简单的打印表格
2020/01/15 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
常用python数据类型转换函数总结
2014/03/11 Python
Python实现两款计算器功能示例
2017/12/19 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
django-allauth入门学习和使用详解
2019/07/03 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
用python写爬虫简单吗
2020/07/28 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
简单说下OSPF的操作过程
2014/08/13 面试题
八年级数学教学反思
2014/01/31 职场文书
职工运动会邀请函
2014/02/02 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
平安建设实施方案
2014/03/19 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
财务负责人任命书
2014/06/06 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
音乐教师求职信范文
2015/03/20 职场文书
经济纠纷起诉状
2015/05/20 职场文书
心术观后感
2015/06/11 职场文书