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 前一天或后一天的日期
Jun 28 PHP
PHP strtotime函数详解
Dec 18 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
基于php split()函数的用法详解
Jun 05 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 PHP
微信接口生成带参数的二维码
Jul 31 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
PHP排序二叉树基本功能实现方法示例
May 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/03 冲泡冲煮
如何使用PHP往windows中添加用户
2006/12/06 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
javascript新手语法小结
2008/06/15 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
js使用递归解析xml
2014/12/12 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
python list排序的两种方法及实例讲解
2017/03/20 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
教师见习期自我鉴定
2014/04/28 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
廉洁自律证明
2015/06/24 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers