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 相关文章推荐
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
比较全面的PHP数组的使用方法小结
Sep 23 PHP
网站用php实现paypal整合方法
Nov 28 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
smarty模板数学运算示例
Dec 11 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
js控制input输入字符解析
2013/12/27 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
python右对齐的实例方法
2020/07/05 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
商务会议邀请函
2014/01/09 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
推荐信模板
2014/05/09 职场文书
幼儿老师求职信
2014/06/30 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技