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函数解决SQL injection
Oct 09 PHP
关于php fread()使用技巧
Jan 22 PHP
php HandlerSocket的使用
May 02 PHP
php删除指定目录的方法
Apr 03 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
php实现微信支付之企业付款
May 30 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
php 可变函数使用小结
Jun 12 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 PHP
laravel通用化的CURD的实现
Dec 13 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 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
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
python中sys.argv函数精简概括
2018/07/08 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
主题酒店策划书
2014/01/28 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
法律顾问服务方案
2014/05/15 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
招标保密承诺书
2015/01/20 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
田径运动会通讯稿
2015/07/18 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers