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 array_slice函数的使用以及参数详解
Aug 30 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
thinkphp5使用无限极分类
Feb 18 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
如何在PHP中使用数组
Jun 09 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
中国第一家无线电行
2021/03/01 无线电
图书管理程序(一)
2006/10/09 PHP
一个简单计数器的源代码
2006/10/09 PHP
php二分查找二种实现示例
2014/03/12 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
javascript实现抢购倒计时程序
2019/08/26 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
Python的多态性实例分析
2015/07/07 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python定义函数实现累计求和操作
2020/05/03 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
感恩母亲节演讲稿
2014/05/07 职场文书
世博会口号
2014/06/20 职场文书
担保书范本
2015/01/20 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
欢送会主持词
2015/07/01 职场文书
《刷子李》教学反思
2016/02/20 职场文书
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python