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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
COM in PHP (winows only)
Oct 09 PHP
让你同时上传 1000 个文件 (一)
Oct 09 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 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常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
jquery一句话全选/取消全选
2011/03/01 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python重试装饰器示例
2014/02/11 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
python求解汉诺塔游戏
2020/07/09 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
英语专业个人求职自荐信
2013/09/21 职场文书
开业庆典答谢词
2014/01/18 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
办护照工作证明
2014/10/01 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python