@greenfavo
2015-09-22T20:53:30.000000Z
字数 2197
阅读 997
php
最近在学习php,写了个多文件上传的demo,除了将文件上传到服务器上还将路径写入了数据库,并把文件链接显示到浏览器上。
多文件上传的是一组数据,所以name='upfile[]'是数组形式,multiple属性可以让用户一次选择多个文件上传,html很简单,最重要的是php的处理。
<form action="" method="post" enctype="multipart/form-data" >
<input type="file" name="upfile[]" multiple/><br>
<button type="submit" name="upload">上传</button>
</form>
它是个多维数组,可以保存上传文件的所有信息,如果上传域的name属性值为'upfile',则可以使用$_FILES['upfile']来访问上传文件的有关信息。
$_FILES['upfile']['name'];//文件原名,不包含路径
$_FILES['upfile']['tmp_name'];//保存的临时文件名,包含路径
$_FILES['upfile']['type'];//上传文件的MIME类型,如image/jpg
$_FILES['upfile']['size'];//已上传文件大小,单位字节
$_FILES['upfile']['error'];//上传过程中出现的错误号,是个整数
我将数据库连接信息单独放在一个conn.php的文件中,每次使用时就将它require进来就好了。
//conn.php
<?php
//连接数据库服务器
$conn=mysql_connect("localhost","root","");
//设置数据库字符集
mysql_query("set names 'utf8'");
//连接数据库
mysql_select_db("phptest",$conn);
?>
文件是先上传到临时文件目录里,一般在C盘,我们主要是将文件从临时目录里移动到要上传的目录中。多文件上传的话主要是用循环处理,现在$_FILES变成三维数组了,要用索引来访问。直接上代码吧,注释很详细。
<?php
require 'conn.php';//引入数据库连接文件
// 文件上传处理
if (isset($_POST['upload'])) {
//getcwd()获取当前目录路径
$upload_dir=getcwd()."\\uploads\\";
if (!is_dir($upload_dir)) {
//不存在则创建目录
mkdir($upload_dir);
}
for ($i=0; $i <count($_FILES['upfile']['name']) ; $i++) {
//截取文件扩展名
$filename[$i]=$_FILES['upfile']['name'][$i];//原文件名
$fileExt[$i]=strtolower(trim(strrchr($filename[$i], "."),0));
//判断文件类型
if (strpos(' .png.jpg.jpeg.gif.docx.doc.xls.xlsx.pptx.ppt.pdf', $fileExt[$i])!=false) {
//文件重命名
$newfilename[$i]=(time()+$i).$fileExt[$i];
//文件路径
$newfilepath[$i]=$upload_dir.$newfilename[$i];
//如果临时文件存在表示上传成功,移动文件到目标目录
if (file_exists($_FILES['upfile']['tmp_name'][$i])) {
move_uploaded_file($_FILES['upfile']['tmp_name'][$i],$newfilepath[$i] );
$filepath[$i]="uploads/".$newfilename[$i];//相对路径
//将路径存入数据库
savefile($filename[$i],$filepath[$i]);
}
}else{
echo "不支持此类型上传!";
}
}
// 显示文件连接
$result=mysql_query("select * from lyb",$conn);
while ($row=mysql_fetch_assoc($result)) {
if ($row['filename']<>"") {//如果文件名不为空
echo "<li><a href='".$row['filepath']."'/>".$row['filename']."</a></li>";
}
}
}
function savefile($filename,$filepath){
$sql="insert into lyb (filename,filepath) values ('$filename','$filepath')";
mysql_query($sql) or die("执行失败!");
}
?>
本例没有演示页面,有兴趣的朋友可以直接按顺序复制代码到本地测试。记得先建好数据库并正确设置字段。近期还会写php相关文章,主要是php访问数据库,敬请关注。