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+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
php使用类继承解决代码重复的问题
Feb 11 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
PHP实现的一致性哈希算法完整实例
Nov 14 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
apache集成php7.3.5的详细步骤
Jun 20 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设计模式之单例模式使用示例
2014/01/20 PHP
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Cpy和Python的效率对比
2015/03/20 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Python解惑之True和False详解
2017/04/24 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
答题辅助python代码实现
2018/01/16 Python
Python模块文件结构代码详解
2018/02/03 Python
用Python解决x的n次方问题
2019/02/08 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
西尔斯百货官网:Sears
2016/09/06 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
培训督导岗位职责
2015/04/10 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript