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使之能同时支持GIF和JPEG
Oct 09 PHP
php 图片上添加透明度渐变的效果
Jun 29 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
Jun 12 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
php字符串操作常见问题小结
Oct 11 PHP
php防止sql注入的方法详解
Feb 20 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
thinkPHP框架实现多表查询的方法
Jun 14 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结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
python range()函数取反序遍历sequence的方法
2018/06/25 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
美国时尚在线:Showpo
2017/09/08 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
vue实现倒计时功能
2021/03/24 Vue.js
英语专业毕业生自荐信范文
2013/12/31 职场文书
小学生秋游活动方案
2014/02/23 职场文书
党员承诺书内容
2014/03/26 职场文书
詹天佑教学反思
2014/04/30 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
求职信如何撰写?
2019/05/22 职场文书