• 无控制类型

    • avi文件
    • rar文件
    • mp4MP3图片等会被直接解析
  • 核心代码
    • 类型
    • 长度
    • 实现函数
  • 优化
    • 原始下载文件的名称
    • 优化后的文件下载名称
  • 总结

文件下载的功能对一个网站而言基本上是必备的了,今天就来看看PHP是如何实现文件下载的吧。


无控制类型

这里说的无控制类型是指 没有添加PHP代码控制的资源可以被直接下载的那些类型。一般而言,压缩文件.rar; 音视频文件:..avi等等也可以被直接下载。但是音频和mp4则会直接被浏览器解析播放。
如下图:

.avi文件

.rar文件

.mp4,MP3,图片等会被直接解析

核心代码

使用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文件下载使用起来相较于Java实现真的是太方便了呢。在下载文件的内部,有许多的信息提供给我们,通过这些封装好的信息,我们可以实现更加优雅的文件下载系统。

PHP 文件下载 浅析相关推荐

  1. web文件上传下载原理浅析

    一.web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能 ...

  2. php文件下载到服务器代码,PHP文件下载实例代码浅析

    文件下载的功能对一个网站而言基本上是必备的了,今天就来看看php是如何实现文件下载的吧. 无控制类型 这里说的无控制类型是指 没有添加php代码控制的资源可以被直接下载的那些类型.一般而言,压缩文件. ...

  3. php文件下载脚本,PHP文件下载实例代码浅析

    文件下载的功能对一个网站而言基本上是必备的了,今天就来看看PHP是如何实现文件下载的吧. 无控制类型 这里说的无控制类型是指 没有添加PHP代码控制的资源可以被直接下载的那些类型.一般而言,压缩文件. ...

  4. 学徒浅析Android——Android原生下载机制针对0K大小文件下载异常的分析

    本篇文章已授权微信公众号 guolin_blog(郭霖)独家发布 最近在进行一次测试用例中,发现测试手机在利用本地下载功能下载0K大小的文件时,进度条一直处于进度模糊状态中,虽然查看本地存储路径,发现 ...

  5. BT源代码学习心得(九):客户端源代码分析(图形界面浅析) -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(九):客户端源代码分析(图形界面浅析)  author:wolfenstein 客户端将从btdownloadgui.py开始进行分析,这样可以顺便把Python中的GUI编程也看 ...

  6. 浅析项目工作量估算方法

    浅析项目工作量估算方法 马克思主义的认识论和实践观告诉我们,认识源于实践:总结实践经验.深化认识,进而指导实践,通过实践检验.修正认识(理论),螺旋式上升地提高认识. 项目管理作为一个实践性很强的学科 ...

  7. java ftp输出流_java输出流实现文件下载

    //导出Excel try { HSSFWorkbook wb = carService.export(list); //调用service方法~! response.setContentType(& ...

  8. 若依RuoYi框架浅析——导读

    文章目录 一.部署篇 二.基础篇 二.进阶篇 有超链接的博客,是已经写完的,可以直接点击进去看 没有链接的博客,是计划写的,还没写完,我会尽快写完 本博客可放心订阅,有问题直接在博客下面留言,我看到后 ...

  9. 深入分析Java Web技术内幕读书笔记(一)浅析Web请求过程

    随着Web技术的快速发展,互联网的网络架构已经从传统的C/S架构转变为B/S架构,B/S架构相较于传统的C/S架构,有诸多优点,例如:提供了统一的操作方式,简化了用户的学习成本:便捷的开发方式大大提高 ...

  10. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

最新文章

  1. 追查连接mysql的客户端
  2. Python脑电数据的Epoching处理
  3. STM32外设有哪些?外设在总线上是怎么挂载的?
  4. boost::transform_iterator用法的测试程序
  5. 论文浅尝 - ICML2020 | 对比图神经网络解释器
  6. 华为云 手机 电脑登录不了怎么办 账户_华为云手机能解决芯片困难,是否真的实在,来西瓜视频找答案...
  7. 不相干进程之间传递文件描述符
  8. 荣耀50系列完整规格曝光:Vlog至美之作
  9. 为什么现在的游戏笔记本那么贵,动不动就上万块,组装机不好吗?
  10. ESXi vSphere Client中copy paste如何启用
  11. baseresponse响应类_SpringBoot统一响应体解决方案
  12. 凤凰系统基于android x x86,凤凰系统X86|Phoenix OS X86 V3.0.8.529官方版
  13. android studio代理设置
  14. Springboot实战项目完结篇之商城系统之收货地址管理
  15. Win10企业版转专业版
  16. uniapp微信小程序更新提醒
  17. Adobe Acrobat XI 闪退问题
  18. 密码学---数字签名和认证协议---数字签名标准
  19. Android FaceBook登录接入--散列密钥获取
  20. QGC地面站对PX4无人机速度进行限制

热门文章

  1. 有关matlab裁剪图片方面
  2. 阿里巴巴矢量图库,图标导入的简单使用
  3. 【MySQL 09】安装mysql时出现:需要这两个包perl(Data::Dumper),perl(JSON)
  4. iOS依赖注入框架系列(二):设置Typhoon
  5. FeignClient中每一个@RequestParam 都要设置value,否者报错
  6. Kotlin中三元运算符
  7. 蓝牙与计算机无法建立连接,电脑蓝牙无法建立连接是为什么呀?
  8. sql日期格式转换函数_SQL转换日期函数和格式
  9. Centos下ftp的安装和配置
  10. python 音频文件采样率转换