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 相关文章推荐
一个简单的域名注册情况查询程序
Oct 09 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
PHP基于mcript扩展实现对称加密功能示例
Feb 21 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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基础学习笔记
2007/03/18 PHP
HTML node相关的一些资料整理
2010/01/01 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
JS实现div居中示例
2014/04/17 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
vue.js实现的绑定class操作示例
2018/07/06 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
vue中的mvvm模式讲解
2019/01/31 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
python提示No module named images的解决方法
2014/09/29 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
在python中画正态分布图像的实例
2019/07/08 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
Why do we need Unit test
2013/01/03 面试题
大学生通用个人自我评价
2014/04/27 职场文书
护士实习求职信
2014/06/22 职场文书
一年级小学生评语大全
2014/12/25 职场文书
婚姻出轨保证书
2015/05/08 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python