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 相关文章推荐
PHP在Web开发领域的优势
Oct 09 PHP
PHP+ajax 无刷新删除数据
Feb 20 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 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微信公众号开发之微信企业付款给个人
2018/10/04 PHP
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
幼儿园大班评语大全
2014/04/17 职场文书
建筑学专业自荐书
2014/07/09 职场文书
人大调研汇报材料
2014/08/14 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2014年环卫工作总结
2014/11/22 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
python程序的组织结构详解
2021/12/06 Python
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技