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自定义函数实现代码
Dec 30 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 PHP
PHP+ajax实现获取新闻数据简单示例
May 08 PHP
PHP递归算法的简单实例
Feb 28 PHP
PHP7匿名类的用法示例
Apr 05 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
PHP isset()及empty()用法区别详解
Aug 29 PHP
php中get_object_vars()在数组的实例用法
Feb 22 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操作access数据库的方法详解
2017/02/22 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
python 接口返回的json字符串实例
2018/03/27 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
应届生求职信范文
2014/06/30 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
防卫过当辩护词
2015/05/21 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python
SQL Server表分区删除详情
2021/10/16 SQL Server
php png失真的原因及解决办法
2021/10/24 PHP