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 默默经典版本
Aug 04 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
php使用curl存储cookie的示例
Mar 31 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
php实现curl模拟ftp上传的方法
Jul 29 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
Symfony控制层深入详解
Mar 17 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
php7下的filesize函数
Sep 30 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 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下escape解码函数的实现方法
2010/08/08 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
twig里使用js变量的方法
2016/02/05 PHP
php常用数组函数实例小结
2016/12/29 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
机器学习10大经典算法详解
2017/12/07 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python实现简单井字棋游戏
2020/03/04 Python
python 通过exifread读取照片信息
2020/12/24 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
宝宝周岁宴答谢词
2014/01/26 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang