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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php无限遍历目录示例
Feb 21 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
php插件Xajax使用方法详解
Aug 31 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
canvas绘制多边形
2017/02/24 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
详解flask表单提交的两种方式
2018/07/21 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
Pygame框架实现飞机大战
2020/08/07 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
房地产还款计划书
2014/01/10 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
教师个人读书活动总结
2014/07/08 职场文书
单位工作证明
2014/10/07 职场文书
2015双创工作总结
2015/07/24 职场文书
婚宴新郎致辞
2015/07/28 职场文书
小学教代会开幕词
2016/03/04 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
mysql如何能有效防止删库跑路
2021/10/05 MySQL