PHP安全下载文件的方法


Posted in PHP onApril 07, 2016

本文实例讲述了PHP安全下载文件的方法。分享给大家供大家参考,具体如下:

<?php
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH', dirname(__FILE__));
/**
 * 下载文件
 * @param string $file_path 绝对路径
 */
function downFile($file_path) {
  //判断文件是否存在
  $file_path = iconv('utf-8', 'gb2312', $file_path); //对可能出现的中文名称进行转码
  if (!file_exists($file_path)) {
    exit('文件不存在!');
  }
  $file_name = basename($file_path); //获取文件名称
  $file_size = filesize($file_path); //获取文件大小
  $fp = fopen($file_path, 'r'); //以只读的方式打开文件
  header("Content-type: application/octet-stream");
  header("Accept-Ranges: bytes");
  header("Accept-Length: {$file_size}");
  header("Content-Disposition: attachment;filename={$file_name}");
  $buffer = 1024;
  $file_count = 0;
  //判断文件是否结束
  while (!feof($fp) && ($file_size-$file_count>0)) {
    $file_data = fread($fp, $buffer);
    $file_count += $buffer;
    echo $file_data;
  }
  fclose($fp); //关闭文件
}
downFile(ROOT_PATH . '/down/Sunset.jpg');
?>

说明:文件名称可以接受中文名称。文件格式为 utf-8。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php,不用COM,生成excel文件
Oct 09 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
PHP计数器的实现代码
Jun 08 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php的ddos攻击解决方法
Jan 08 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
PHP6新特性分析
Mar 03 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 #PHP
PHP使用token防止表单重复提交的方法
Apr 07 #PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 #PHP
Linux下编译redis和phpredis的方法
Apr 07 #PHP
php 实现进制相互转换
Apr 07 #PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 #PHP
php制作简单模版引擎
Apr 07 #PHP
You might like
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
javascript动态加载二
2012/08/22 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
Python正则表达式介绍
2012/08/06 Python
python实现飞机大战项目
2020/03/11 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
出纳岗位职责范本
2013/12/01 职场文书
高中班主任评语大全
2014/04/25 职场文书
西安兵马俑导游词
2015/02/02 职场文书
企业培训简报范文
2015/07/20 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
python中__slots__节约内存的具体做法
2021/07/04 Python