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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
php学习之变量的使用
May 29 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php简单实现sql防注入的方法
Apr 22 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 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开发微信支付的流程
2015/10/04 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
Python 文件操作实现代码
2009/10/07 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
法务专员岗位职责
2014/01/02 职场文书
2015个人半年总结范文
2015/03/09 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书