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生成月历代码
Jun 14 PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
php如何获取文件的扩展名
Oct 28 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
Javascript 面向对象特性
2009/12/28 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
在Python中COM口的调用方法
2019/07/03 Python
Python 使用type来定义类的实现
2019/11/19 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
幼师自荐信
2013/10/26 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
写景作文评语集锦
2014/12/25 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript