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 之 没有mysql支持时的替代方案
Oct 09 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 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
文件上传的实现
2006/10/09 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
Python抓取京东图书评论数据
2014/08/31 Python
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
Python打包可执行文件的方法详解
2016/09/19 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python 3.8 新功能全解
2019/07/25 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
医学求职自荐信
2014/06/21 职场文书
个人事迹材料范文
2014/12/29 职场文书
大学生个人总结范文
2015/02/15 职场文书
工资证明范本
2015/06/12 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
Java设计模式中的命令模式
2022/04/28 Java/Android