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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
php adodb连接不同数据库
Mar 19 PHP
二招解决php乱码问题
Mar 25 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
php实用代码片段整理
Nov 12 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
PHP PDOStatement::bindValue讲解
Jan 30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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/08/21 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
Python入门篇之数字
2014/10/20 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
python实现分页效果
2017/10/25 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
用python进行视频剪辑
2020/11/02 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
extern是什么意思
2016/03/10 面试题
酒店实习个人鉴定
2013/12/07 职场文书
中学自我评价
2014/01/31 职场文书
教师个人自我评价范文
2014/04/13 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript