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函数
Oct 03 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
定义php常量的详解
Jun 09 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
php 数组随机取值的简单实例
May 23 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 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类常量的使用详解
2013/06/08 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
Python 开发Activex组件方法
2009/11/08 Python
json跨域调用python的方法详解
2017/01/11 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
Django中的静态文件管理过程解析
2019/08/01 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
css3media响应式布局实例
2016/07/08 HTML / CSS
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
总务岗位职责
2013/11/19 职场文书
办公室岗位职责
2014/02/12 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
技术员个人工作总结
2015/03/03 职场文书
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers