[关闭]
@greenfavo 2015-09-22T20:53:30.000000Z 字数 2197 阅读 997

php学习笔记(一)多文件上传及数据库存储

php


前言

最近在学习php,写了个多文件上传的demo,除了将文件上传到服务器上还将路径写入了数据库,并把文件链接显示到浏览器上。

一,html结构

多文件上传的是一组数据,所以name='upfile[]'是数组形式,multiple属性可以让用户一次选择多个文件上传,html很简单,最重要的是php的处理。

  1. <form action="" method="post" enctype="multipart/form-data" >
  2. <input type="file" name="upfile[]" multiple/><br>
  3. <button type="submit" name="upload">上传</button>
  4. </form>

二,使用$_FILES获取上传文件信息

它是个多维数组,可以保存上传文件的所有信息,如果上传域的name属性值为'upfile',则可以使用$_FILES['upfile']来访问上传文件的有关信息。

  1. $_FILES['upfile']['name'];//文件原名,不包含路径
  2. $_FILES['upfile']['tmp_name'];//保存的临时文件名,包含路径
  3. $_FILES['upfile']['type'];//上传文件的MIME类型,如image/jpg
  4. $_FILES['upfile']['size'];//已上传文件大小,单位字节
  5. $_FILES['upfile']['error'];//上传过程中出现的错误号,是个整数

三,初始化数据库连接

我将数据库连接信息单独放在一个conn.php的文件中,每次使用时就将它require进来就好了。

  1. //conn.php
  2. <?php
  3. //连接数据库服务器
  4. $conn=mysql_connect("localhost","root","");
  5. //设置数据库字符集
  6. mysql_query("set names 'utf8'");
  7. //连接数据库
  8. mysql_select_db("phptest",$conn);
  9. ?>

四,上传处理

文件是先上传到临时文件目录里,一般在C盘,我们主要是将文件从临时目录里移动到要上传的目录中。多文件上传的话主要是用循环处理,现在$_FILES变成三维数组了,要用索引来访问。直接上代码吧,注释很详细。

  1. <?php
  2. require 'conn.php';//引入数据库连接文件
  3. // 文件上传处理
  4. if (isset($_POST['upload'])) {
  5. //getcwd()获取当前目录路径
  6. $upload_dir=getcwd()."\\uploads\\";
  7. if (!is_dir($upload_dir)) {
  8. //不存在则创建目录
  9. mkdir($upload_dir);
  10. }
  11. for ($i=0; $i <count($_FILES['upfile']['name']) ; $i++) {
  12. //截取文件扩展名
  13. $filename[$i]=$_FILES['upfile']['name'][$i];//原文件名
  14. $fileExt[$i]=strtolower(trim(strrchr($filename[$i], "."),0));
  15. //判断文件类型
  16. if (strpos(' .png.jpg.jpeg.gif.docx.doc.xls.xlsx.pptx.ppt.pdf', $fileExt[$i])!=false) {
  17. //文件重命名
  18. $newfilename[$i]=(time()+$i).$fileExt[$i];
  19. //文件路径
  20. $newfilepath[$i]=$upload_dir.$newfilename[$i];
  21. //如果临时文件存在表示上传成功,移动文件到目标目录
  22. if (file_exists($_FILES['upfile']['tmp_name'][$i])) {
  23. move_uploaded_file($_FILES['upfile']['tmp_name'][$i],$newfilepath[$i] );
  24. $filepath[$i]="uploads/".$newfilename[$i];//相对路径
  25. //将路径存入数据库
  26. savefile($filename[$i],$filepath[$i]);
  27. }
  28. }else{
  29. echo "不支持此类型上传!";
  30. }
  31. }
  32. // 显示文件连接
  33. $result=mysql_query("select * from lyb",$conn);
  34. while ($row=mysql_fetch_assoc($result)) {
  35. if ($row['filename']<>"") {//如果文件名不为空
  36. echo "<li><a href='".$row['filepath']."'/>".$row['filename']."</a></li>";
  37. }
  38. }
  39. }
  40. function savefile($filename,$filepath){
  41. $sql="insert into lyb (filename,filepath) values ('$filename','$filepath')";
  42. mysql_query($sql) or die("执行失败!");
  43. }
  44. ?>

五,后记

本例没有演示页面,有兴趣的朋友可以直接按顺序复制代码到本地测试。记得先建好数据库并正确设置字段。近期还会写php相关文章,主要是php访问数据库,敬请关注。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注