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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
PHP 数组基础知识小结
Aug 20 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
在Nginx上部署ThinkPHP项目教程
Feb 02 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
微信小程序和php的登录实现
Apr 01 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安装为Apache DSO
2006/10/09 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
JavaScript 的继承
2011/10/01 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
js实现星星打分效果
2020/07/05 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
会计电算化专业毕业生自荐信
2013/12/20 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript