| php实现任何文件地点击下载 |
|
| 日期:2006-6-3 16:58:00 人气:
[大
中 小] |
|
我们首先考虑的是文件上传的问题。我们设计数据库如下: 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'] $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); //生成语句,并且添加到数据库中。这里,你可以参考我以前的文章 } }
--------------------------------------------------------------------------------
上面的程序中,复制了一个类似于 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>"; 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的文件直接打开的现像了。
|
|
| 出处:mumayi.net 作者:不详 |
|
|