php实现文件下载功能的流程分析

客户端从服务端下载文件的流程分析:

浏览器发送一个请求,请求访问服务器中的某个网页(如:down.php),该网页的代码如下。
服务器接受到该请求以后,马上运行该down.php文件
运行该文件的时候,必然要把将要被下载的文件读入内存当中(这里是圣诞狂欢.jpg这张图片),这里通过fopen()函数完成该动作

代码:
 

 代码如下 复制代码
<?php
     header("Content-type:text/html;charset=utf-8");
 //    $file_name="cookie.jpg";
     $file_name="圣诞狂欢.jpg";
     //用以解决中文不能显示出来的问题
     $file_name=iconv("utf-8","gb2312",$file_name);
     $file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/";
     $file_path=$file_sub_path.$file_name;
     //首先要判断给定的文件存在与否
     if(!file_exists($file_path)){
         echo "没有该文件文件";
         return ;
     }
     $fp=fopen($file_path,"r");
     $file_size=filesize($file_path);
     //下载文件需要用到的头
     Header("Content-type: application/octet-stream");
     Header("Accept-Ranges: bytes");
     Header("Accept-Length:".$file_size);
     Header("Content-Disposition: attachment; filename=".$file_name);
     $buffer=1024;
     $file_count=0;
     //向浏览器返回数据
     while(!feof($fp) && $file_count<$file_size){
         $file_con=fread($fp,$buffer);
         $file_count+=$buffer;
         echo $file_con;
     }
 fclose($fp);
 ?>

header("Content-type:text/html;charset=utf-8")的作用:在服务器响应浏览器的请求时,告诉浏览器以编码格式为UTF-8的编码显示该内容
关于file_exists()函数不支持中文路径的问题:因为php函数比较早,不支持中文,所以如果被下载的文件名是中文的话,需要对其进行字符编码转换,否则file_exists()函数不能识别,可以使用iconv()函数进行编码转换
 $file_sub_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)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

注意:任何有关从服务器下载的文件操作,必然需要先在服务端将文件读入内存当中

现在文件已经在内存当中了,这是需要从内存当中读取文件,通过fread()函数完成该动作
需要注意的是,如果文件较大,文件应该是被分成多段返回给客户端的,并不是等文件在服务端全部读取完毕后,一次性返回给客户端,因为这样子会增加服务器的负荷。

时间: 2024-09-27 03:37:08

php实现文件下载功能的流程分析的相关文章

Php中文件下载功能实现超详细流程分析_php技巧

客户端从服务端下载文件的流程分析: 浏览器发送一个请求,请求访问服务器中的某个网页(如:down.php),该网页的代码如下. 服务器接受到该请求以后,马上运行该down.php文件 运行该文件的时候,必然要把将要被下载的文件读入内存当中(这里是圣诞狂欢.jpg这张图片),这里通过fopen()函数完成该动作 注意:任何有关从服务器下载的文件操作,必然需要先在服务端将文件读入内存当中 现在文件已经在内存当中了,这是需要从内存当中读取文件,通过fread()函数完成该动作 需要注意的是,如果文件较

IOS7 NSURLSession使用说明及后台工作流程分析

http://www.cnblogs.com/biosli/p/iOS_Network_URL_Session.html NSURLSession简介 NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意,如果用户强制将程序关闭,NSURLSession会断掉. NSURLSession提供的功能: 通过URL将数据下载到内存 通过URL将数据下载到文

《容器技术系列》一1.3 Docker各模块功能与实现分析

1.3 Docker各模块功能与实现分析 下面我们将从Docker的总架构图入手,抽离出架构内的各个模块,并对各个模块进行更为细化的架构分析与功能阐述. 1.3.1 Docker Client Docker Client是Docker架构中用户与Docker Daemon建立通信的客户端.在一台安装有Docker的机器上,用户可以使用可执行文件docker作为Docker Client,发起众多Docker容器的管理请求. Docker Client可以通过以下三种方式和Docker Daemo

WebGL 启动加载触发更新流程分析

WebGL 启动加载触发更新流程分析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. requestAnimFrame(tick); 此命令是 HTML5 中新增的用于替换定时器触发更新的命令,

A5营销团队:网站降权后处理流程分析(二)

中介交易 SEO诊断 淘宝客 云主机 技术大厅 在上一期的< A5营销团队:网站降权后处理流程分析(一)>中,我们对网站降权以及处理流程做了一个分析.本次A5营销团队(http://seo.admin5.com)贺贵江在站长网论坛整理了一些较为热点的优化问题,并做公益分享. 一:残留死链接降权 网站改版仅仅是对模板进行替换吗,需要注意一些什么呢?对此我们着重强调一点:谨慎修改URL结构.有些网站在改版中会对URL链接进行调整,甚至删除掉弃之不用的HTML页面.此类站点:修改页面较少基本不会产生

android中集中html5,怎样实现文件下载功能,我现在有一个超链接

问题描述 android中集中html5,怎样实现文件下载功能,我现在有一个超链接 <a href="http://xxxxxxx/group1/M00/00/08/Ci09DVSb9n6AH76IAAX4AIw6xuk01.docx?attname=基于ANT的增量代码检查.docx&attachid=942'" download="基于ANT的增量代码检查.docx" class="graybtn">下载</a>

用Visual C#实现文件下载功能

visual|下载 一.概述: 本文通过一个实例向大家介绍用Visual C#进行Internet通讯编程的一些基本知识.我们知道.Net类包含了请求/响应层.应用协议层.传输层等层次.在本程序中,我们运用了位于请求/响应层的WebRequest类以及WebClient类等来实现高抽象程度的Internet通讯服务.本程序的功能是完成网络文件的下载. 二.实现原理: 程序实现的原理比较简单,主要用到了WebClient类和FileStream类.其中WebClient类处于System.Net名

ASP.NET MVC如何向浏览器发送文件以提供文件下载功能

文件下载一般都是需要一个文件选择对话框来选择存放文件的地方.我们可以自己做一个, 但简单的方面就是利用浏览器的现成功能. 所有的浏览器都包括文件下载功能,但文件选择对话框却 不是每个浏览器都有提供.这里我只选择我常用的两个浏览器:谷歌浏览器和搜狗浏览器. 先来一个 小例子: public ActionResult Index() { var path = Server.MapPath("~/frog.jpg.jpg"); return File(path, "iamge/jp

win7系统搜索功能的全面分析

系统的搜索功能是我们在查找文件的时候,肯定会用到的功能,特别是对于换过系统的人,因为很多人装软件的时候,只要不是放在C盘就行了,而你换完系统软件都还在,只是在桌面找不到而已,这时候我们可以通过搜索,找到软件然后把它发送到桌面. 1 xp系统的搜索功能 xp系统点击开始菜单没有直接的搜索功能,需要再次点击.搜索范围可以我们自己定,但是对于搜索结果都是绝对匹配,也就是文件要保护你所有的输入信息才能被搜索到. 2 win7与xp系统不同的搜索结果 win7系统会对文件的搜索结果进行简单的划分,让你更加