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目录函数实现创建、读取目录教程实例
Jan 13 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php获取网页请求状态程序示例
Jun 17 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
php 查找数组元素提高效率的方法详解
May 05 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
php 信息采集程序代码
2009/03/17 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
非常好的js代码
2006/06/27 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
初始Nodejs
2014/11/08 NodeJs
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
Python统计单词出现的次数
2018/04/04 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
python 制作本地应用搜索工具
2021/02/27 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
大一自我鉴定范文
2013/10/04 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
餐厅考勤管理制度
2014/01/28 职场文书
股指期货心得体会
2014/09/13 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书