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 相关文章推荐
MySql中正则表达式的使用方法描述
Jul 30 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
php 保留字列表
Oct 04 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php生成圆角图片的方法
Apr 07 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
PHP dirname简单使用代码实例
Nov 13 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 在线打包_支持子目录
2008/06/28 PHP
PHP DataGrid 实现代码
2009/08/12 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python绘制中国大陆人口热力图
2018/11/07 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
建筑安全标语
2014/06/07 职场文书
小学中队活动总结
2015/05/11 职场文书
应收账款管理制度
2015/08/06 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
mysql 索引合并的使用
2021/08/30 MySQL