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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
漂亮但不安全的CTB
Oct 09 PHP
深入了解PHP类Class的概念
Jun 14 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
ucenter通信原理分析
Jan 09 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
PHP中的流(streams)浅析
Jul 02 PHP
php实现短信发送代码
Jul 05 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
php图片裁剪函数
Oct 31 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 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修改Linux或Unix口令的方法分享
2012/01/30 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
javascript工具库代码
2012/03/29 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python生成pdf文件的方法
2014/08/04 Python
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
详解python字节码
2018/02/07 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
django中模板的html自动转意方法
2018/05/27 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
Python中过滤字符串列表的方法
2020/12/22 Python
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
大学生自我评价怎样写好
2013/10/23 职场文书
最新教师自我评价分享
2013/11/12 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL