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 相关文章推荐
SSI指令
Nov 25 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php修改指定文件后缀的方法
Sep 11 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
PHP单例模式详细介绍
Jul 01 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
PHP生成随机密码4种方法及性能对比
Dec 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中一个控制字符串输出的函数
2006/10/09 PHP
php csv操作类代码
2009/12/14 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
解析PHP的session过期设置
2013/06/29 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Windows下搭建python开发环境详细步骤
2020/07/20 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
python logging日志模块的详解
2017/10/29 Python
3分钟学会一个Python小技巧
2018/11/23 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
Python实现点云投影到平面显示
2020/01/18 Python
数据员岗位职责
2013/11/19 职场文书
合作协议书范文
2014/08/20 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
PHP策略模式写法
2021/04/01 PHP
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python