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版(5)
Oct 09 PHP
在php中取得image按钮传递的name值
Oct 09 PHP
PHP控制网页过期时间的代码
Sep 28 PHP
php 获取远程网页内容的函数
Sep 08 PHP
php中模拟POST传递数据的两种方法分享
Sep 16 PHP
php中apc缓存使用示例
Dec 25 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
php生成xml简单实例代码
2009/12/16 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
Python正则表达式使用经典实例
2016/06/21 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
优质的学校老师推荐信
2013/10/28 职场文书
高中运动会广播稿
2014/01/21 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
医德医风自我评价
2014/09/19 职场文书
中学生自我评价2015
2015/03/03 职场文书