我们首先考虑的是文件上传的问题。我们设计数据库如下:
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的文件直接打开的现像了。