浅析PHP文件下载原理


Posted in PHP onDecember 25, 2014

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 相关文章推荐
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
php递归实现无限分类的方法
Jul 28 PHP
php制作简单模版引擎
Apr 07 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
php中简单的对称加密算法实现
Jan 05 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
Laravel 连接(Join)示例
Oct 16 PHP
Laravel框架之解决前端显示图片问题
Oct 24 PHP
php使用sql server验证连接数据库的方法
Dec 25 #PHP
php实现mysql事务处理的方法
Dec 25 #PHP
php使用pdo连接mssql server数据库实例
Dec 25 #PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 #PHP
完整删除ecshop中获取店铺信息的API
Dec 24 #PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 #PHP
thinkPHP实现表单自动验证
Dec 24 #PHP
You might like
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
php include类文件超时问题处理
2015/02/06 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
对于Python装饰器使用的一些建议
2015/06/03 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
三年级小学生评语
2014/04/22 职场文书
文明单位申报材料
2014/12/23 职场文书
总经理岗位职责
2015/02/04 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技