PHP实现下载功能的代码


Posted in PHP onSeptember 29, 2012

wzskynet#163.com
·php escapeshellcmd多字节编码漏洞
·详细讲解PHP中缓存技术的应用
·利用PHP V5开发多任务应用程序
·详细解析 PHP 向 MySQL 发送数据过程
·PHP实现静态发布的方法浅谈
你一定会笑我“下载文件”如此简单都值得说?当然并不是想你想象的那么简单。例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用 “Redirect”的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,例如笔者编写的以下代码:

<? 
// 检查 FORM 是否全部填写完毕... 
if ($form_completed) { 
Header("Location: https://3water.com/download/info_check.exe"); 
exit; 
} 
?>

或者是以下的情况:
<a href="http://www.yourwebl.com/users/download.php?id=124524">开始下载文件</a>

这里利用了ID方式接收要下载文件的编号,然后用“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 = "https://3water.com/"; 
$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文件安全下载!

public function downloads($name){ 
$name_tmp = explode("_",$name); 
$type = $name_tmp[0]; 
$file_time = explode(".",$name_tmp[3]); 
$file_time = $file_time[0]; 
$file_date = date("Y/md",$file_time); 
$file_dir = SITE_PATH."/data/uploads/$type/$file_date/"; if (!file_exists($file_dir.$name)){ 
header("Content-type: text/html; charset=utf-8"); 
echo "File not found!"; 
exit; 
} else { 
$file = fopen($file_dir.$name,"r"); 
Header("Content-type: application/octet-stream"); 
Header("Accept-Ranges: bytes"); 
Header("Accept-Length: ".filesize($file_dir . $name)); 
Header("Content-Disposition: attachment; filename=".$name); 
echo fread($file, filesize($file_dir.$name)); 
fclose($file); 
} 
}
PHP 相关文章推荐
php中文件上传的安全问题
Oct 09 PHP
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
PHP VS ASP
Oct 09 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
PHP实现字母数字混合验证码功能
Jul 11 PHP
php流量统计功能的实现代码
Sep 29 #PHP
Zend的AutoLoad机制介绍
Sep 27 #PHP
说说PHP的autoLoad自动加载机制
Sep 27 #PHP
php FLEA中二叉树数组的遍历输出
Sep 26 #PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 #PHP
PHP可逆加密/解密函数分享
Sep 25 #PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 #PHP
You might like
小文件php+SQLite存储方案
2010/09/04 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
Python实现的计算器功能示例
2018/04/26 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
公务员年总结的自我评价
2013/10/25 职场文书
求职简历中个人的自我评价
2013/12/01 职场文书
学校介绍信范文
2014/01/14 职场文书
会计电算化应届生自荐信
2014/02/25 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
投资合作意向书范本
2015/05/08 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js