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 HTML代码串 截取实现代码
Jun 29 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
php的ddos攻击解决方法
Jan 08 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php登录超时检测功能实例详解
Mar 21 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
TP5框架页面跳转样式操作示例
Apr 05 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 读取文件的正确方法
2009/04/29 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
BootStrap的双日历时间控件使用
2017/07/25 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python中字符串前面加r的作用
2015/06/04 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
Python 实现微信自动回复的方法
2020/09/11 Python
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
人事专员岗位职责
2013/11/20 职场文书
社区安全检查制度
2014/02/03 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
我的中国梦主题班会
2015/08/14 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏