使用php怎么一个实现中文文件下载功能

  介绍

本篇文章给大家分享的是有关使用php怎么一个实现中文文件下载功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>一,将文件下载请求映射到后端程序url

借助http服务器(apache/nginx)实现映射功能

这里以apache为例进行说明

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

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

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

<强>二、编写具体的文件下载逻辑

<强>项目目录

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


使用php怎么一个实现中文文件下载功能

示例

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

& lt; php ?//接收需要下载的文件名称   如果(!收取($ _GET[& # 39;文件# 39;])),退出(& # 39;Filename  is 空# 39;);   如果(空($ _GET[& # 39;文件# 39;])),退出(& # 39;Filename  not 有效# 39;);   ob_clean();//清除一下缓冲区//获得文件名称   $ filename =, basename (urldecode ($ _GET[& # 39;文件# 39;]));//文件完整路径(这里将真实的文件存放在临时目录下)   $ filePath =, __DIR__ !”/temp/懊涝募?//将utf8编码转换成gbk编码,否则,文件中文名称的文件无法打开   filePath 美元;=,iconv (& # 39; utf - 8 # 39;, & # 39; gbk # 39;, filePath美元);//检查文件是否可读   如果(! is_file (filePath美元),| |,! is_readable (filePath美元)),退出(& # 39;还要not  access  file  & # 39; $ filename);/* *   ,*这里应该加上安全验证之类的代码,例如:检测请求来源,验证UA标识等等   ,*///以只读方式打开文件,并强制使用二进制模式   文件句柄美元=fopen (filePath美元,“rb");   if($文件句柄===false) {   退出才能(“还要not  open 文件:,filename"美元;);   }//文件类型是二进制流。设置为utf8编码(支持中文文件名称)   头(& # 39;内容类型:应用程序/八进制;,charset=utf - 8 # 39;);   头(“Content-Transfer-Encoding: binary");   头(“Accept-Ranges: bytes");//文件大小   头(“内容长度:,“.filesize (filePath美元));//触发浏览器文件下载功能   头(& # 39;附加项:附件;文件名=? # 39;.urlencode ($ filename)强生# 39;“& # 39;);//循环读取文件内容,并输出   而(! feof($文件句柄),{//才能从文件指针,handle 读取最多,length ,个字节(每次输出10 k)   echo 才能从文件中读($文件句柄,10240);   }//关闭文件流   文件关闭($文件句柄);

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

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

filePath 美元;=,iconv (& # 39; utf - 8 # 39; & # 39; gbk # 39;, filePath美元);   头(& # 39;内容类型:应用程序/八进制;,charset=utf - 8 # 39;);

以上就是使用php怎么一个实现中文文件下载功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

使用php怎么一个实现中文文件下载功能