网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 安全文摘 > php实现任何文件地点击下载  

php实现任何文件地点击下载

2005-03-02  作者:BitsCN整理  来源:中国网管联盟  点评 投稿 收藏

我们首先考虑的是文件上传的问题。我们设计数据库如下:
PHP代码:--------------------------------------------------------------------------------
create table attachment (
  id int unsigned not null auto_increment,
  attachment_data varchar(255) not null, /* 文件路径 */
  attachment_filename varchar(255) not null, /* 文件名 */
  attachment_details mediumtext not null, /* 文件说明 */
  attachment_size varchar(255) not null,/*文件大小*/
  primary key(id);
  ) type=InnoDB;

--------------------------------------------------------------------------------


下面这个是我做的上传一个例子:

PHP代码:--------------------------------------------------------------------------------
//upload.php
  $upload_file = $_FILES['attachment']['tmp_name'];
  if($upload_file){
  $file_size_max = 1000*1000;// 1M限制文件上传最大容量
  $attachment_size = $_FILES['attachment']['size']
网管u家u.bitsCN.com

  $store_dir = 自己设置一个吧; //上传文件夹
  if ($$attachment_size > $file_size_max) {
  echo "<script language=javascript>alert('上传文件超过预设置大小');history.go(-1);< /script>";
  exit;
  }elseif (!move_uploaded_file($upload_file,$store_dir.time())) {
  echo "<script language=javascript>alert('文件上传失败');history.go(-1);</script>";
  exit;
  }else{
  $attachment = array(
  "attachment_data"=>$store_dir.date("YmdHis").$_FILES['attachment']['name'],
  "attachment_filename"=>$_FILES['file']['name'],
  "attachment_details"=>$attachment_details,
  "attachment_size"=>$attachment_size;
  );
  $attachment->setAttachment($attachment_info); //生成语句,并且添加到数据库中。这里,你可以参考我以前的文章 网管联盟bitsCN_com
  }
  }

--------------------------------------------------------------------------------

上面的程序中,复制了一个类似于 1103012366 的文件到上传文件夹。其实这个就是把上传文件改了一下名,把后辍去掉了。然后我们在下载页面这样写:

PHP代码:--------------------------------------------------------------------------------
//download.php
  include_once("./litou_include.inc.php");
  $attachment = new ATTACHMENT();

  $attachment_this = $attachment->getAttachment_By_ID_Type($_GET['id'],$_GET['type']);
  #前面这些程序是从数据库中检索相应的信息的,这些你完全可以做到,就不再举出实例了。

  $file_data = $attachment_this['attachment_data']; #文件下载路径
  $file_name = $attachment_this['attachment_filename']; #文件名

  if (!file_exists($file_data)) { //检查文件是否存在
  echo "<script language=javascript>alert('你下载的文件并不存在');window.location='".$_SERVER ['HTTP_REFERER']."'</script>";

网管论坛bbs_bitsCN_com


  exit;
  } else {
  $FILE = fopen($file_data,"r"); // 打开文件
  Header("Content-type: application/octet-stream");
  Header("Accept-Ranges: bytes");
  Header("Accept-Length: ".filesize($file_data));
  Header("Content-Disposition: attachment; filename=" . $file_name); #下载时显示的文件名
  echo fread($file,filesize($file_data));
  fclose($file);
  exit;
  }

--------------------------------------------------------------------------------

其实原理很简单,就是一个文件输出的问题,但这样以前真的让我郁闷了一阵子,通过此程序,你可以让任何文件实现下载,而不会出现.php的文件直接打开的现像了。

TAGs   点击   下载   文件   任何   实现   上传   attachment   attachment_size      
 上一篇:php和asp对象的等价关系   下一篇:用vbs来写sql注入80端口攻击脚本
php实现任何文件地点击下载 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: