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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
php实现通过ftp上传文件
Jun 19 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 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格式化日期实例分析
2014/11/12 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
php二维码生成
2015/10/19 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
小程序自定义日历效果
2018/12/29 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
在Python中使用列表生成式的教程
2015/04/27 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
Java编程面试题
2016/04/04 面试题
化学教学随笔感言
2014/02/19 职场文书
后勤主管岗位职责
2014/03/01 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
团日活动总结范文
2014/04/25 职场文书
汽修专业自荐信
2014/07/07 职场文书
学校政风行风整改方案
2014/10/25 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
angular异步验证器防抖实例详解
2022/03/31 Javascript
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技
Elasticsearch 配置详解
2022/04/19 Java/Android