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默认安装产生系统漏洞
Oct 09 PHP
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
PHP错误机制知识汇总
Mar 24 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
JavaScript中Function详解
2015/02/27 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
python抽象基类用法实例分析
2015/06/04 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
Python telnet登陆功能实现代码
2020/04/16 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
高二化学教学反思
2014/01/30 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
学雷锋月活动总结
2014/04/25 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
升职感谢信
2015/01/22 职场文书
基层工作经历证明
2015/06/19 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python