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 相关文章推荐
学习使用curl采集curl使用方法
Jan 11 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
Thinkphp调用Image类生成缩略图的方法
Mar 07 PHP
php生成gif动画的方法
Nov 05 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
PHP序列化操作方法分析
Sep 28 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP7数组的底层实现示例
Aug 25 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 ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
Javascript this 的一些学习总结
2012/08/02 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
科学发展观演讲稿
2014/09/11 职场文书
入党积极分子考察意见
2015/06/02 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技