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+javascript液晶时钟
Oct 09 PHP
Windows下的PHP5.0详解
Nov 18 PHP
php 文件上传类代码
Aug 06 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
PHP进阶学习之反射基本概念与用法分析
Jun 18 PHP
php 的多进程操作实践案例分析
Feb 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
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
Python中使用中文的方法
2011/02/19 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python脚本处理空格的方法
2016/08/08 Python
python3实现基于用户的协同过滤
2018/05/31 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
小区门卫管理制度
2014/01/29 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
出国导师推荐信
2015/03/25 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang