PHP实现文件下载详解


Posted in PHP onNovember 27, 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”);

4使用header方式实现文件下载源码

附上整理的下载方法,已封装好,可直接使用:

     function download_by_path($path_name, $save_name){

         ob_end_clean();

         $hfile = fopen($path_name, "rb") or die("Can not find file: $path_name\n");

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

         Header("Content-Transfer-Encoding: binary");

         Header("Accept-Ranges: bytes");

         Header("Content-Length: ".filesize($path_name));

         Header("Content-Disposition: attachment; filename=\"$save_name\"");

         while (!feof($hfile)) {

            echo fread($hfile, 32768);

         }

         fclose($hfile);

    }

以上就是本文的全部内容了,小伙伴们是否对php实现文件下载有了初步的认识了呢,自己多做做尝试,结合本文给出的简单例子,让自己的项目更完善吧。

PHP 相关文章推荐
删除无限分类并同时删除它下面的所有子分类的方法
Aug 08 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
php中的比较运算符详解
Oct 28 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php 删除cookie方法详解
Dec 01 PHP
php生成图片验证码
Jun 09 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
Joomla使用Apache重写模式的方法
May 04 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
thinkphp的URL路由规则与配置实例
Nov 26 #PHP
thinkphp文件引用与分支结构用法实例
Nov 26 #PHP
PHP获取当前所在目录位置的方法
Nov 26 #PHP
thinkphp模板的包含与渲染实例分析
Nov 26 #PHP
PHP中strtr字符串替换用法详解
Nov 26 #PHP
thinkphp模板继承实例简述
Nov 26 #PHP
thinkphp中空模板与空模块的用法实例
Nov 26 #PHP
You might like
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php多进程应用场景实例详解
2019/07/22 PHP
php中的依赖注入实例详解
2019/08/14 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
js模拟实现Array的sort方法
2007/12/11 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
详解python中asyncio模块
2018/03/03 Python
django中模板的html自动转意方法
2018/05/27 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
python操作kafka实践的示例代码
2019/06/19 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
pycharm导入源码的具体步骤
2020/08/04 Python
python3实现飞机大战
2020/11/29 Python
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
十佳教师事迹材料
2014/01/11 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
读书活动实施方案
2014/03/10 职场文书
公司应聘自荐书
2014/06/14 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
民事起诉书范本
2015/05/19 职场文书
致运动员加油稿
2015/07/21 职场文书