您的位置:首页 > 数据库 > MySQL

web编程之上传下载模块(PHP+Mysql)

2014-06-23 16:29 274 查看

web编程之上传下载模块(PHP防盗链)

一,文件上传与下载原理解析

1,文件上传

客户端:注意form表单设置 enctype="multipart/form-data" 以确保匿名上传文件的正确编码。

服务端:上传处理文件upload.php,代码如下:

<?php

$file = $_FILES['userfile'];  //接收表单信息
$dest_dir='up';               //设定上传目录
$dest=$dest_dir.time().$file['name']; //设定文件名为时间加文件名,可有效避免重复。
if(!$file)
{
echo"移动文件出错";
exit();
}
else
{
$r=move_uploaded_file($file['tmp_name'],$dest);
echo "上传成功";
}
?>


上例中$_FILES['userfile']数组的内容含义如下:

$_FILES['userfile']['name'] :客户端机器文件的原名称 $_FILES['userfile']['type']
:文件的类型

$_FILES['userfile']['size']:文件的大小,单位为B

2,文件下载

需要下载一个xxx.rar的文件,首先创建一个download.php的文件,可以很容易的通过文件的ID从数据库中得到文件的真实存储位置,可以通过header()函数的location参数直接重定向到这个文件,但这样依然不安全。可以通过fread()函数把文件直接输出到浏览器提示用户下载。这样所有处理都是在服务器端完成的,用户就无法获得文件的具体位置。代码如下:

<?php
$file_name="xxxx.rar";
$file_dir="/up/";
if(!file_exists($file_dir.$file_name))
{
echo"文件找不到";
exit();
}
else
{
//打开文件
$file=fopen($file_dir.$file_name,"r");
//输入文件标签
header("content-type:application/octer-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();
}

?>


二,文件上传程序

1,上传文件的服务端处理(规定文件上传类型,文件大小限制)

<?php
header("content-Type:text/html;charset=utf8");
$uptypes=array(
'image/jpg',   //上传文件类型列表
'image/png',
'image/jpeg',
'image/gif',
'image/bmp',
'audio/mp3',
'audio/x-ms-wma');
$max_file_size=20000000;     //上传文件大小限制
$path_parts=pathinfo($_SERVER['PHP_SELF']);  //取得当前路径
$destination_folder="up/";  //上传文件路径
$imgview=1;   //是否生成预览图(1为生成,其他不生成)
$imgreviewsize=1/2;  //缩略图比例
$fiele=$_FILE['userfile'];
if ($max_file_size<$file['size'])
{
echo "文件太大";
exit();
}
if(!in_array($file['type'],$uptypes))

{
echo"不能上传此文件类型";
exit();
}
if(!file_exists($destinatuon_folder))
{
mkdir($destination_folder);
}
$filename=$file["tmp_name"];
$image_size=getimagesize($filename);  //getimagesize() 获得一个三元组,分别是图片长宽,类型
$pinfo=pathinfo($file["name"];   //pathinfo() 函数以数组的形式返回文件路径的信息。
$ftype=$pinfo['extension'];
$destination=$destination.time().".".$ftype;
$fname=time().$type;
if(file_exists($destination)&&$overwrite!=true)
{
echo "同名文件已经存在。";
exit();
}
//移动文件异常处理
if(!move_uploaded_file($filename,$destination))
{
echo"移动文件出错。";
exit();
}
else
{
//添加写入数据库的部分
$con mysql_connect('location','root','sspku') or die ("数据库连接失败。");
$db=mysql_select_db("zrfpku");
if(!$db)
{
die("can't  use this  DB")
}
else
{
$sql="insert into f_detail ('id','fname','ftype','des','url','utime') values ........";
$result=mysql_query($sql);
if(!$result)
{
mysql_free_result($resuly);
mysql_close($db);
echo"数据记录插入失败";
}

}
}

?>


三,文件下载程序(略,见原理)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: