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 相关文章推荐
phpmyadmin的#1251问题
Nov 25 PHP
php下使用无限生命期Session的方法
Mar 16 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 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 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
php创建无限级树型菜单
2015/11/05 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
js获取页面description的方法
2015/05/21 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Python numpy 点数组去重的实例
2018/04/18 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
医学实习生自我鉴定
2013/12/12 职场文书
体育教师自我鉴定
2014/02/12 职场文书
领导离职感言
2015/08/03 职场文书
MySQL 数据表操作
2022/05/04 MySQL
Redis特殊数据类型bitmap位图
2022/06/01 Redis
python高温预警数据获取实例
2022/07/23 Python