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 VS ASP
Oct 09 PHP
第十节--抽象方法和抽象类
Nov 16 PHP
php中使用Akismet防止垃圾评论的代码
Jun 10 PHP
php无限极分类实现的两种解决方法
Apr 28 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
PHP实现合并discuz用户
Aug 05 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
javascript之锁定表格栏位
2007/06/29 Javascript
ext实现完整的登录代码
2008/08/08 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
python3中的md5加密实例
2018/05/29 Python
Python中交换两个元素的实现方法
2018/06/29 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python restful框架接口开发实现
2020/04/13 Python
python之随机数函数的实现示例
2020/12/30 Python
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
为什么使用接口?
2014/08/13 面试题
自主招生自荐信
2013/12/08 职场文书
师德个人剖析材料
2014/02/02 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
详解jQuery的核心函数和事件处理
2022/02/18 jQuery