php实现文件下载(支持中文文名)


Posted in PHP onDecember 04, 2013
 /*======================================================
  $FileName 为文件名称,必传
  $FilePath 为文件路径.选填,可以为相对路径或者绝对路径
      路径只能由英文跟数据组成,不能带有中文
 ======================================================*/
<?php 
 header("Content-type: text/html;charset=utf-8");
 if(strlen($FileName)<=3){echo "下载失败:你所以下载的文件信息有误";return;}
 $FileName=iconv("utf-8","gb2312",$FileName);//进行文件名格式转换,以防中文乱码
 //开始判断路径
 if(!is_null($FilePath)&&strlen($FilePath)>1){
  if(substr($FilePath,0,1)=='/'){//判断是否为绝对路径
   $FilePath=$_SERVER['DOCUMENT_ROOT'].$FilePath;
    }
  if(substr($FilePath,-1)!="/"){//检查最后是否为 / 结尾
   $FilePath=$FilePath.'/';
    }
  if(is_numeric(strpos($FilePath,":\"))){//检查是否为绝对路径
   $FilePath=str_replace("/","\",$FilePath);
    }
   }elseif(strlen($FilePath)==1&&$FilePath!="/"){
    $FilePath=$FilePath."/";
   }else{
    $FilePath="";
  }
  if(!file_exists($FilePath.$FileName)){
   echo"下载失败:所要下载的文件未找到";return;
   }
  /*================================================
   发送下载相关的头部信息
  =================================================*/
  header("Content-type: application/octet-stream");
  header("Accept-Ranges: bytes");//按照字节大小返回
  header("Accept-Length: $FileSize");//返回文件大小
  header("Content-Disposition: attachment; filename=".$FileName);//这里客户端的弹出对话框,对应的文件名
  /*================================================
   开始下载相关
  =================================================*/ 
$FileSize=filesize($FilePath.$FileName);
  $File=fopen($FilePath.$FileName,"r");//打开文件
  $FileBuff=512;
  while($FileSize>=0){
   $FileSize-=$FileBuff;
   echo fread($File,$FileBuff);
  }
  fclose($File);
 }
?>

PHP 相关文章推荐
php 特殊字符处理函数
Sep 05 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
php GUID生成函数和类
Mar 10 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
php实现字符串反转输出的方法
Mar 14 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
php指定函数参数默认值示例代码
Dec 04 #PHP
根据中文裁减字符串函数的php代码
Dec 03 #PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 #PHP
php查找任何页面上的所有链接的方法
Dec 03 #PHP
php实现查看邮件是否已被阅读的方法
Dec 03 #PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 #PHP
php中{}大括号是什么意思
Dec 01 #PHP
You might like
探讨捕获php错误信息方法的详解
2013/06/09 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Python常用的日期时间处理方法示例
2015/02/08 Python
Python读取网页内容的方法
2015/07/30 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
django中的setting最佳配置小结
2017/11/21 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
七年级数学教学反思
2014/01/22 职场文书
大学生社团活动总结
2014/04/26 职场文书
项目建议书模板
2014/05/12 职场文书
党校学习心得体会范文
2014/09/09 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js