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学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
生成卡号php代码
Apr 09 PHP
php修改时间格式的代码
May 29 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
PHPEXCEL 使用小记
Jan 06 PHP
php堆排序(heapsort)练习
Nov 13 PHP
PHP入门之常量简介和系统常量
May 12 PHP
ucenter通信原理分析
Jan 09 PHP
PHP速成大法
Jan 30 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 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年最新CPU天梯图
2021/03/04 数码科技
php中将网址转换为超链接的函数
2011/09/02 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
浅谈JavaScript闭包
2019/04/09 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
判断网页编码的方法python版
2016/08/12 Python
python 内置函数filter
2017/06/01 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python3 logging日志封装实例
2020/04/08 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
韩国商务邀请函
2014/01/14 职场文书
班主任寄语大全
2014/04/04 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS