浅析PHP文件下载原理

2014-11-24  来源:本站原创  分类:php实例  人气:0 

这篇文章主要介绍了浅析PHP文件下载原理,需要的朋友可以参考下

1、php下载原理图

浅析PHP文件下载原理

2、文件下载源码:

<?php

$file_name="哈哈.jpg";//需要下载的文件

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

$fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存

if(!file_exists($file_name)){//判断文件是否存在

    echo "文件不存在";

    exit();

}

$file_size=filesize("a.jpg");//判断文件大小

//返回的文件

Header("Content-type: application/octet-stream");

//按照字节格式返回

Header("Accept-Ranges: bytes");

//返回文件大小

Header("Accept-Length: ".$file_size);

//弹出客户端对话框,对应的文件名

Header("Content-Disposition: attachment; filename=".$file_name);

//防止服务器瞬时压力增大,分段读取

$buffer=1024;

while(!feof($fp)){

    $file_data=fread($fp,$buffer);

    echo $file_data;

}

//关闭文件

fclose($fp);

?>

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

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

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

相关文章
  • 浅析PHP文件下载原理 2014-11-24

    这篇文章主要介绍了浅析PHP文件下载原理,需要的朋友可以参考下 1.php下载原理图 2.文件下载源码: <?php $file_name="哈哈.jpg";//需要下载的文件 $file_name=iconv("utf-8","gb2312","$file_name"); $fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存 if(!file_exists(

  • http断点续传与文件下载原理解析 2015-01-25

    一.断点续传的原理 其实断点续传的原理很简单,就是在http的请求上和一般的下载有所不同而已. 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为www.jizhuomi.com/android,文件名为down.zip. get /down.zip http/1.1 accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/ms

  • 浅析Docker架构.原理及实例配置演示 2014-09-14

    介绍 Docker是一个为开发人员和系统管理员开发.迁移和运行应用程序的平台.应用程序通过Docker打包成Docker Image后,可以实现统一的方式来下载.启动.扩展.删除和迁移,这样方便了应用程序的部署和运维.本文将介绍Docker的主要组件.系统架构和工作原理,并实例演示Docker的一些简单操作. 更多信息 Docker的主要组件 Docker引擎:开源的虚拟化容器技术平台. Docker Hub:为用户提供共享和管理Docker容器的SaaS服务平台. Docker的系统架构 Do

  • 浅析正则表达式--柳暗花明又一村篇 2014-08-04

    一.前言 本文章主要针对上篇文章进行补充,接上一篇文章<浅析正则表达式-(原理篇)>,首先为什么开篇叫柳暗花明又一村,大家都知道这个词的解释:一个人在想某个问题或做某件事的时候,遇到了一定阻碍,但是后来某个时刻突然来了灵感,使问题得到解决!就是那种"顿悟"的意思!由于前面一篇文章中有人说看到零宽度和占有符的时候就看不下去了,看着就有点模糊,那么下面我就针对零宽度进行讲解下.零宽度其实就是匹配一个位置,前面我们讲了字符串的组成,比如"123"这个字符串有三

  • Javascript动画的实现原理浅析 2013-11-08

    这篇文章主要介绍了Javascript动画的实现原理浅析,本文用两个实例来解释Javascript动画的实现原理,需要的朋友可以参考下 假设有这样一个动画功能需求:把一个div的宽度从100px变化到200px.写出来的代码可能是这样的: <div id="test1" style="width: 100px; height: 100px; background: blue; color: white;"></div> function an

  • Node.js中require的工作原理浅析 2013-12-23

    这篇文章主要介绍了Node.js中require的工作原理浅析,通过分析node.js的源码得到本文,需要的朋友可以参考下 几乎所有的Node.js开发人员可以告诉你`require()`函数做什么,但我们又有多少人真正知道它是如何工作的?我们每天都使用它来加载库和模块,但它的行为,对于我们来说反而是一个谜. 出于好奇,我钻研了node的核心代码来找出在引擎下发生了什么事.但这并不是一个单一的功能,我在node的模块系统的找到了module.js.该文件包含一个令人惊讶的强大的且相对陌生的核心模

  • Android中新引进的Google Authenticator验证系统工作原理浅析 2014-07-18

    这篇文章主要介绍了Android中新引进的Google Authenticator验证系统工作原理浅析,需要的朋友可以参考下 为了改进Android的安全问题,Google在Android系统中引入了谷歌验证应用(Google Authenticator)来保证账号的安全.谷歌验证应用的使用方法是:用户安装手机客户端,生成临时身份验证码,提交到服务器验证身份,类似的验证系统还有Authy.Robbie在其GitHub页面发布了自己用Go语言实现的版本,并撰写了一篇博文来解释其工作原理. 通常来讲

  • .NET垃圾回收器(GC)原理浅析 2014-08-05

    这篇文章主要介绍了.NET垃圾回收器(GC)原理浅析,本文先是讲解了一些基础知识如托管堆(Managed Heap).CPU寄存器(CPU Register).根(Roots)等,然后讲解了垃圾回收的基本原理.算法等,需要的朋友可以参考下 作为.NET进阶内容的一部分,垃圾回收器(简称GC)是必须了解的内容.本着"通俗易懂"的原则,本文将解释CLR中垃圾回收器的工作原理. 基础知识 托管堆(Managed Heap) 先来看MSDN的解释:初始化新进程时,运行时会为进程保留一个连续的地

  • 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析 2014-08-20

    这篇文章主要介绍了使用Memcache缓存mysql数据库操作的原理和缓存过程浅析,本文着重点在Memcache和MySQL数据库的交互过程及流程分解,需要的朋友可以参考下 对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层,数据访问不可能吃得消,对于一般网站,只要具备独立的服务器,完全可以通过配置Memcache提高网站访问速度和减少数据库压力,这里主要讨论一下Memcache和MySQL数据库交互过程的流程关系,了解Memcache的中间缓存层作用,从而深

  • jQuery内部原理和实现方式浅析 2014-12-04

    这篇文章主要介绍了jQuery内部原理和实现方式浅析,本文试图从整体来阐述一下jQuery的内部实现,需要的朋友可以参考下 这段时间在学习研究jQuery源码,受益于jQuery日益发展强大,研究jQuery的大牛越来越多,学习的资料也比前两年好找了,有很多非常不错的资源,如高云的jQuery1.6.1源码分析系列.这些教程非常细致的分析了jQuery内部原理和实现方式,对学习和理解jQuery有非常大的帮助.但是个人认为很多教程对jQuery的整体结果把握不足,本人试图从整体来阐述一下jQue

  • 在线所见即所得HTML编辑器的实现原理浅析 2015-04-10

    这篇文章主要介绍了在线所见即所得HTML编辑器的实现原理浅析,本文用初始化.打开编辑功能.获取编辑器的内容.增加样式设置.再进一步等步骤阐述在线编辑器的基本实现原理,需要的朋友可以参考下 如今网站开发越来越提倡用户体验,为用户提供便利的工具也越来越多,而在线的HTML内容编辑器应该算是其中比较"古老"的一个了.功能简单的可以为用户提供文本的样式控制,例如文字的颜色.字体大小等:而功能复杂的甚至可以提供类似Word一样的强大功能.虽然现在各种开源的编辑器非常多,但是真正好用的并不多,所以

  • 浅析正则表达式-(原理篇) 2014-09-11

    前言: 其实这篇文章很久之前就应该发出来,由于种种原因没有发出来,如果这篇文章中有错误,还请大家指出,小弟并改正之,没有学不会的东西,只有不想学的东西,只要功夫深,铁杵磨成针,我的至理名言:吾生也有涯而知也无涯,以有涯随无涯,殆矣.我们只要坚持将其看完,相信大家的正则表达式会有一个提升空间!本文属于.NET正则表达式里面的内容,由于不同语言正则表达式有所不同. 首先先讲解下正则表达式的基础知识: 1.字符串的组成 对于字符串"123"而言,包括三个字符四个位置.如下图所示: 2.占有字

  • "CEPH浅析"系列之五--CEPH的工作原理及流程 2014-04-02

    本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍.如前所述,由于Ceph的功能实现本质上依托于RADOS,因而,此处的介绍事实上也是针对RADOS进行.对于上层的部分,特别是RADOS GW和RBD,由于现有的文档中(包括Sage的论文中)并未详细介绍,因而本文或有语焉不详之处,还请读者多多包涵. 本文将首先介绍RADOS中最为核心的.基于计算的对象寻址机制,然后说明对象存取的工作流程,之后介绍RADOS集群维护的工作过程,最后结合Ceph的结构和原理对其技术优势加以回顾和剖析. 5.1

  • java swing原理浅析 2013-04-14

    没有接触过ui编程的人在学习ui编程时可能会对ui组件和各组件间的关系有点混乱,下面笔者就java swing的原理做下简单分析,如有不足之处还望各位朋友指正. 其实不光是java swing ,其他大部分ui原理上都差不多,最起码就我接触过的android ui组件.windows C#应用.java界面应用等关于ui的编程原理上都是大同小异,都是基于代理模式与回调模式的.下面先模拟几个常用的ui组件 window:所有窗口类的基类,包含0个或多个component组件,代码如下: packa

  • Netty实现原理浅析 2013-08-24

    1.总体结构 先放上一张漂亮的Netty总体结构图,下面的内容也主要围绕该图上的一些核心功能做分析,但对如Container Integration及Security Support等高级可选功能,本文不予分析. 2.网络模型 Netty是典型的Reactor模型结构,关于Reactor的详尽阐释,可参考POSA2,这里不做概念性的解释.而应用Java NIO构建Reactor模式,Doug Lea(就是那位让人无限景仰的大爷)在"Scalable IO in Java"中给了很好的阐

  • 浅析SkipList跳跃表原理及代码实现 2015-03-26

    SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构.由于它的代码以及原理实现的简单性,更为人们所接受.我们首先看看SkipList的定义,为什么叫跳跃表? " Skip lists are data structures that use probabilistic balancing rather than strictly enforced balancing. As a result, the algorithms for insertion and de

  • 浅析PHP原理之变量分离/引用(Variables Separation) 2014-06-22

    以下小编就为大家介绍一下PHP中变量分离和引用的概念.需要的朋友可以过来参考下 首先我们回顾一下zval的结构: struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount; zend_uchar type; /* active type */ zend_uchar is_ref; }; 其中的refcount和is_ref字段我们一直都没有介绍过,我们知道

  • 浅析PHP原理之变量(Variables inside PHP) 2015-02-07

    我前面的文章中已经讲过,PHP的执行是通过Zend engine(ZE, Zend引擎), ZE是用C编写的,大家都知道C是一个强类型语言,也就是说,在C中所有的变量在它被声明到最终销毁,都只能保存一种类型的数据. 那么PHP是如何在ZE的基础上实现弱类型的呢 或许你知道,或许你不知道,PHP是一个弱类型,动态的脚本语言.所谓弱类型,就是说PHP并不严格验证变量类型(严格来讲,PHP是一个中强类型语言,这部分内容会在以后的文章中叙述),在申明一个变量的时候,并不需要显示指明它保存的数据的类型:

  • 浅析Facebook软件架构:Tao和BLOB的实现原理 2014-11-12

    Tao是一套针对读取进行优化的数据存储机制,并以单一地理分布实例的方式部署在Facebook当中.和Google的Megastore,Spanner地位等同,它底层持久化采用的是MySql,上层的Cache Server使用的是分布式的Memcached. Tao系统的设计初衷在于为"数PB级别"的庞大数据集提供每秒超过十亿次读取操作. 用户数达10亿级别的Facebook是如何使用这些存储系统的呢?原文作者Murat针对图形数据库TAO和BLOB 存储系统进行解析. 以下为译文: 图

  • Google GWT的RPC原理浅析 2013-09-12

    主要是为了转发个帖子,Mark一下. 工作的时候遇到个问题,打包的war包部署到线上环境时发现post请求都发到了cdn.xx.com去了,这才产生了想法. 整个项目使用Google GWT的框架进行开发,GWT的好处在于使用Java的方式来写JS,并且客户端与服务端采用RPC的方式进行通讯,简化了不必要的序列化反序列化的操作,简化了开发过程.那么最终又是如何生成js代码并和后台通信的呢. 在使用ANT进行编译的时候,首先编译java后台代码,之后调用GWT的编译器com.google.gwt.