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 相关文章推荐
图形数字验证代码
Oct 09 PHP
搜索引擎技术核心揭密
Oct 09 PHP
adodb与adodb_lite之比较
Dec 31 PHP
php 中的4种标记风格介绍
May 10 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 PHP
php动态函数调用方法
May 21 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
php中分页及SqlHelper类用法实例
Jan 12 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
在Django的URLconf中使用命名组的方法
2015/07/18 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Django的分页器实例(paginator)
2017/12/01 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
pandas 时间格式转换的实现
2019/07/06 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python如何实现FTP功能
2020/05/28 Python
python利用faker库批量生成测试数据
2020/10/15 Python
抽象方法、抽象类怎样声明
2014/10/25 面试题
如何选择使用结构还是类
2014/05/30 面试题
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
参观邀请函范文
2015/02/02 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫
源码安装apache脚本部署过程详解
2022/09/23 Servers