浅析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 和 MySQL 时区的一点总结
Mar 26 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
php旋转图片90度的方法
Nov 07 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
PHP实现的MongoDB数据库操作类分享
May 12 PHP
PHP获取当前日期和时间及格式化方法参数
May 11 PHP
php创建类并调用的实例方法
Sep 25 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
详解Django中Request对象的相关用法
2015/07/17 Python
Python自动发邮件脚本
2017/03/31 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Python argparse模块应用实例解析
2019/11/15 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
C语言笔试题
2014/09/04 面试题
医学检验专业大学生求职信
2013/11/18 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
详解Python描述符的工作原理
2021/06/11 Python