前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php 实现文件下载

php 实现文件下载

作者头像
joshua317
发布2018-04-10 18:00:53
2.1K0
发布2018-04-10 18:00:53
举报
文章被收录于专栏:技术博文技术博文

1、php下载原理图

2、文件下载源码:

代码语言:javascript
复制
 1 <?php
 2 $file_name="umiwi.apk";//需要下载的文件
 3 $file_dir = "./"; //文件目录
 4 $file_path = $file_dir.$file_name;//文件路径
 5 $file_name=iconv("utf-8","gb2312","$file_name");
 6 $fp=fopen($file_dir.$file_name,"r+");//下载文件必须先要将文件打开,写入内存
 7 if(!file_exists($file_dir.$file_name)){//判断文件是否存在
 8     echo "文件不存在";
 9     exit();
10 }
11 $file_size=filesize($file_dir.$file_name);//判断文件大小
12 
13 //返回的文件
14 Header("Content-type: application/octet-stream");
15 //按照字节格式返回
16 Header("Accept-Ranges: bytes");
17 //返回文件大小
18 Header("Accept-Length: ".$file_size);
19 //弹出客户端对话框,对应的文件名
20 Header("Content-Disposition: attachment; filename=".$file_name);
21 //防止服务器瞬时压力增大,分段读取
22 $buffer=1024;
23 while(!feof($fp)){
24     $file_data=fread($fp,$buffer);
25     echo $file_data;
26 }
27 //关闭文件
28 fclose($fp);
29 ?>

3、文件编码问题解决方法:

  如果文件名是中文,php的函数不能识别中文文件名,一般如果程序编码为utf-8,php的函数比较古老,只能识别gb2312编码的中文,所以把中文用iconv(“原编码”,”要转成的编码”,”要转码的字符串”)函数可以转码。

  比如,把一个字符串从utf-8转码为gb2312

  $file_name=iconv(“utf-8”,”gb2312”,”$file_name”);

4、几点注意事项:  header("Content-type:text/html;charset=utf-8")的作用:在服务器响应浏览器的请求时,告诉浏览器以编码格式为UTF-8的编码显示该内容  关于file_exists()函数不支持中文路径的问题:因为php函数比较早,不支持中文,所以如果被下载的文件名是中文的话,需要对其进行字符编码转换,否则file_exists()函数不能识别,可以使用iconv()函数进行编码转换  $file_path 是文件路径,若采用绝对路径,执行效率要比相对路径高  Header("Content-type: application/octet-stream")的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式  Header("Accept-Ranges: bytes")的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的  Header("Accept-Length:".$file_size)的作用:告诉浏览器返回的文件大小  Header("Content-Disposition: attachment; filename=".$file_name)的作用:告诉浏览器返回的文件的名称  以上四个Header()是必需的  fclose($fp)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、php下载原理图
  • 2、文件下载源码:
  • 3、文件编码问题解决方法:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档