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 和 MySQL 开发的 8 个技巧
Jan 02 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
Python连接SQLServer2000的方法详解
2017/04/19 Python
python生成随机图形验证码详解
2017/11/08 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
Linux下python3.7.0安装教程
2018/07/30 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
开水果连锁店创业计划书
2013/12/29 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
病危通知书样本
2015/04/17 职场文书
红色经典电影观后感
2015/06/18 职场文书
圣诞晚会主持词
2015/07/01 职场文书