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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
PHP的魔术常量__METHOD__简介
Jul 08 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
php解决安全问题的方法实例
Sep 19 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
Laravel5.1 框架路由基础详解
Jan 04 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的中问验证码
2006/11/25 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
jquery选择器使用详解
2014/04/08 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
机器学习python实战之决策树
2017/11/01 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
简述数据库的设计过程
2015/06/22 面试题
读书心得体会
2013/12/28 职场文书
村委会贫困证明范本
2014/09/17 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
python运行脚本文件的三种方法实例
2022/06/25 Python