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和AJAX创建RSS聚合器的代码
Mar 13 PHP
wordpress之wp-settings.php
Aug 17 PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
php中的ini配置原理详解
Oct 14 PHP
ThinkPHP分页实例
Oct 15 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
php实现三级级联下拉框
Apr 17 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 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
西德产收音机
2021/03/01 无线电
PHP5+UTF8多文件上传类
2008/10/17 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
10条php编程小技巧
2015/07/07 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
js修改input的type属性问题探讨
2013/10/12 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
详解JS函数重载
2014/12/04 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
Python 读写文件的操作代码
2018/09/20 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
装潢设计专业推荐信模板
2013/11/26 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
打架检讨书范文
2015/01/27 职场文书