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 相关文章推荐
php5新改动之短标记启用方法
Sep 11 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
php快速url重写 更新版[需php 5.30以上]
Apr 20 PHP
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
Laravel下生成验证码的类
Nov 15 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按单词截取字符串的方法
2015/04/07 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
对numpy.append()里的axis的用法详解
2018/06/28 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
Ajxa常见问题都有哪些
2014/03/26 面试题
小学生美德少年事迹
2014/02/02 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
离职证明标准格式
2014/09/15 职场文书
研究生导师推荐信
2015/03/25 职场文书
合同审查法律意见书
2015/06/04 职场文书