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 register_globals 值为on与off的理解
Sep 26 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
什么情况下可以不写PHP的闭合标签“?>”
Aug 28 PHP
memcache一致性hash的php实现方法
Mar 05 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
PHP 搜索查询功能实现
Nov 29 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
PHP接入支付宝接口失效流程详解
Nov 10 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
文件系统基本操作类
2006/11/23 PHP
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
flask框架中的cookie和session使用
2021/01/31 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
Europcar意大利:汽车租赁
2019/07/07 全球购物
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
对象析构函数__del__在Python中何时使用
2022/03/22 Python