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生成HTML静态页面实例代码
Aug 31 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 PHP
PHP命名空间定义与用法实例分析
Aug 14 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 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
解析csv数据导入mysql的方法
2013/07/01 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
php计算一个文件大小的方法
2015/03/30 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python动态参数用法实例分析
2015/05/25 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
Python生成数字图片代码分享
2017/10/31 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
迟到检讨书800字
2014/01/13 职场文书
会计演讲稿范文
2014/05/23 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
家长会主持词开场白
2015/05/29 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS