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 中文和编码判断代码
May 16 PHP
PHP入门学习笔记之一
Oct 12 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
php模板函数 正则实现代码
Oct 15 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
php中socket通信机制实例详解
Jan 03 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
python实现微信小程序自动回复
2018/09/10 Python
Python闭包思想与用法浅析
2018/12/27 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
大学生村官事迹材料
2014/01/21 职场文书
妇产医师自荐信
2014/01/29 职场文书
运动会获奖感言
2014/02/11 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript