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 zend解密软件绿色版测试可用
Apr 14 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
PHP截取指定图片大小的方法
Dec 10 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
phpstudy2020搭建站点的实现示例
Oct 30 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
python学习必备知识汇总
2017/09/08 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
会计的岗位职责
2014/03/15 职场文书
竞赛口号大全
2014/06/16 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
2016高考寄语集锦
2015/12/04 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书