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 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
thinkphp实现分页显示功能
Dec 03 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
java直接调用python脚本的例子
2014/02/16 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
销售人员个人求职信
2013/09/26 职场文书
实习单位接收函模板
2014/01/10 职场文书
中学教师管理制度
2014/01/14 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
试用期辞职信范文
2015/03/02 职场文书
政府会议通知范文
2015/04/15 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP