php 实现文件下载

时间:2022-05-08
本文章向大家介绍php 实现文件下载,主要内容包括1、php下载原理图、2、文件下载源码:、3、文件编码问题解决方法:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

1、php下载原理图

2、文件下载源码:

 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)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区