PHP实现文件安全下载


Posted in PHP onOctober 09, 2006

你一定会笑我"下载文件"如此简单都值得说?当然并不是想象那么简单。例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用 "Redirect"的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,但如果你想做一个关于"网上购物"的电子商务网站,考虑安全问题,你不想用户直接复制网址下载该文件,笔者建议你使用PHP直接读取该实际文件然后下载的方法去做。程序如下:

$file_name = "info_check.exe";
$file_dir = "/public/www/download/";
if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
echo "文件找不到";
exit;
} else {
$file = fopen($file_dir . $file_name,"r"); // 打开文件
// 输入文件标签
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_dir . $file_name));
Header("Content-Disposition: attachment; filename=" . $file_name);
// 输出文件内容
echo fread($file,filesize($file_dir . $file_name));
fclose($file);
exit;}

而如果文件路径是"http" 或者 "ftp" 网址的话,则源代码会有少许改变,程序如下:

$file_name = "info_check.exe";
$file_dir = "http://www.easycn.net/";
$file = @ fopen($file_dir . $file_name,"r");
if (!$file) {
echo "文件找不到";
} else {
Header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=" . $file_name);
while (!feof ($file)) {
echo fread($file,50000);
}
fclose ($file);
}

这样就可以用PHP直接输出文件了。 

PHP 相关文章推荐
php array_map array_multisort 高效处理多维数组排序
Jun 11 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
简单的自定义php模板引擎
Aug 26 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
PHP - Html Transfer Code
Oct 09 #PHP
关于PHP中操作MySQL数据库的一些要注意的问题
Oct 09 #PHP
模拟xcopy的函数
Oct 09 #PHP
生成缩略图
Oct 09 #PHP
一个目录遍历函数
Oct 09 #PHP
phpBB BBcode处理的漏洞
Oct 09 #PHP
用IE远程创建Mysql数据库的简易程序
Oct 09 #PHP
You might like
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python reduce()函数的用法小结
2017/11/15 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
优秀大学生求职自荐信范文
2014/04/19 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
会计试用期自我评价
2014/09/19 职场文书
2014年项目工作总结
2014/11/24 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
通知的格式范文
2015/04/27 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS