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 相关文章推荐
打造计数器DIY三步曲(下)
Oct 09 PHP
php缓存技术介绍
Nov 25 PHP
五个PHP程序员工具
May 26 PHP
php 启动报错如何解决
Jan 17 PHP
19个超实用的PHP代码片段
Mar 14 PHP
yii上传文件或图片实例
Apr 01 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 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获取错误信息的方法
2015/07/17 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
浅析Python中的join()方法的使用
2015/05/19 Python
python编程开发之日期操作实例分析
2015/11/13 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
strstr()的简单实现
2013/09/26 面试题
vue路由实现登录拦截
2021/03/24 Vue.js
交通专业个人自荐信格式
2013/09/23 职场文书
施工安全协议书
2013/12/11 职场文书
房屋出售协议书
2014/04/10 职场文书
师德师风演讲稿
2014/05/05 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL