资讯专栏INFORMATION COLUMN

php实现文件下载功能(支持中文)

wangym / 3297人阅读

摘要:问题说明文件下载,通常有一种最为简单的方法,那就是将直接指向服务器上文件的所在位置。

问题说明

文件下载,通常有一种最为简单的方法,那就是将url直接指向服务器上文件的所在位置。但是这个方法存在很大的安全隐患。

暴露了服务器文件目录结构

无法禁止非法请求来源,无法对文件下载请求做安全验证

解决方案 一、将文件下载请求映射到后端程序url 借助http服务器(apache/nginx)实现映射功能

这里以apache为例进行说明
借助apache的rewrite模块,配置rewrite规则。(关于如何开启rewrite模块,网上很多资源,这里不再赘诉)
在项目根目录下创建.htaccess文件,写入rewrite规则

RewriteEngine on
#将所有以rar/zip结尾的url,映射给download.php文件
RewriteRule (.*.(rar|zip))$ download.php?file=$1 [NC]

将所有以rar/zip结尾的url,映射给download.php文件(这里为了方便直接映射到了一个php脚本中,如果是使用框架,那就映射到具体的控制器中的某个方法!例如:index.php?c=home&a=download)

二、编写具体的文件下载逻辑 项目目录

以本地项目为例,用户需要下载的zip文件,放在当前项目的temp目录下

示例

直接上代码,代码中有详细注释


这里只是做了一个示例(只包括核心功能),为了方便说明直接以GET方式从url中获取用户想要下载的文件名称

注意以下两行代码(为了能够下载中文名称的文件)

$filePath = iconv("UTF-8","gbk",$filePath);
header("Content-type:application/octet-stream; charset=utf-8");

如果用户需要下载的是中文名称的文件。则需要将文件路径转换成gbk编码,否则会出现 文件不存在 之类的错误。header中设置utf8编码,也是同样的道理

下载文件

打开浏览器,访问 http://127.0.0.1/rewrite/尴尬.zip 文件便开始下载了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25752.html

相关文章

  • sphinx中文索引实现中文检索

    摘要:一介绍与好处介绍本身是一个中文检索索引技术索引主键唯一普通全文是俄罗斯人开发一款速度效率非常高的索引技术是来替代全文索引的本身的全文索引技术特性表现一般,一般数据库使用全文索引都不是使用本身的,都需要借助第方索引技术支持,搜索引擎百 一.sphinx介绍与好处 介绍 sphinx本身是一个中文检索索引技术 mysql索引: 主键、唯一、普通、全文(match/agaisnt)sphi...

    SoapEye 评论0 收藏0
  • 教程、学习和网址

    摘要:语言写的算法教程,看起来比较草根和接地气,推荐学习。语言圣经中文版语言高级编程中文译本,中文正式名入门指南为互联网人打造的中文版。 这是一些本人网上搜集到的一些好的学习教程、开发资源、和个人有用的链接,以作备份和分享之用。 持续更新中。。。 编程语言 C 语言资源大全中文版https://github.com/jobbole/aw... ECMAScript 6 入门http://es...

    lylwyy2016 评论0 收藏0
  • 教程、学习和网址

    摘要:语言写的算法教程,看起来比较草根和接地气,推荐学习。语言圣经中文版语言高级编程中文译本,中文正式名入门指南为互联网人打造的中文版。 这是一些本人网上搜集到的一些好的学习教程、开发资源、和个人有用的链接,以作备份和分享之用。 持续更新中。。。 编程语言 C 语言资源大全中文版https://github.com/jobbole/aw... ECMAScript 6 入门http://es...

    leoperfect 评论0 收藏0

发表评论

0条评论

wangym

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<