@greenfavo
2015-09-22T12:53:30.000000Z
字数 2197
阅读 1095
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变成三维数组了,要用索引来访问。直接上代码吧,注释很详细。
<?phprequire '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访问数据库,敬请关注。