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 相关文章推荐
PHP6 先修班 JSON实例代码
Aug 23 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
php获取json数据所有的节点路径
May 17 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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下使用iconv需要注意的问题
2010/11/20 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Django 前后台的数据传递的方法
2017/08/08 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Django进阶之CSRF的解决
2018/08/01 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
Python 实现向word(docx)中输出
2020/02/13 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python 怎样进行内存管理
2020/11/10 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
哈理工毕业生的求职信
2013/12/22 职场文书
直接有效的自我评价
2014/01/11 职场文书
农村婚庆主持词
2015/06/29 职场文书
结婚典礼致辞
2015/07/28 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
详解OpenCV曝光融合
2022/04/29 Python
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技