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函数file_get_contents超时处理的方法详解
Jun 03 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
PHP的魔术常量__METHOD__简介
Jul 08 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
yii框架数据库关联查询操作示例
Oct 14 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
JS学习之一个简易的日历控件
2010/03/24 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
详解vue组件基础
2018/05/04 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
pandas 对group进行聚合的例子
2019/12/27 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
经典的班主任推荐信
2013/10/28 职场文书
校友会欢迎辞
2014/01/13 职场文书
关于环保的建议书400字
2014/03/12 职场文书
小班评语大全
2014/05/04 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
python中pycryto实现数据加密
2022/04/29 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android