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+jQuery 注册模块开发详解
Oct 14 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
php compact 通过变量创建数组
Nov 15 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
jQuery中extend函数简单用法示例
2017/10/11 jQuery
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
bat和python批量重命名文件的实现代码
2016/05/19 Python
python 读取DICOM头文件的实例
2018/05/07 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
经理任命书模板
2014/06/06 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
外科护士长工作总结
2015/08/12 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers