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执行zip与rar解压缩方法实现代码
Dec 05 PHP
PHP 第二节 数据类型之数组
Apr 28 PHP
基于Zend的Config机制的应用分析
May 02 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
PHP开发注意事项总结
Feb 04 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
Mar 16 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
php常用字符函数实例小结
Dec 29 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 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
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
工作批评与自我批评范文
2014/10/16 职场文书
扬州个园导游词
2015/02/06 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
利用python进行数据加载
2021/06/20 Python
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Python+Tkinter打造签名设计工具
2022/04/01 Python