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循环获取GET和POST值的代码
Apr 09 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
php使用event扩展的io复用测试的示例
Oct 20 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 curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
Python中字符串的格式化方法小结
2016/05/03 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
物流经理自我评价
2013/09/23 职场文书
打造完美自荐信
2014/01/24 职场文书
大学运动会通讯稿
2014/01/28 职场文书
总经理司机职责
2014/02/02 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
应用数学专业求职信
2014/03/14 职场文书
六一节目主持词
2014/04/01 职场文书
党支部书记岗位职责
2015/02/15 职场文书
刑事法律意见书
2015/06/04 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python