引言

一、HTML表单设计

1.1 基本表单

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

1.2 表单属性

  • action: 表单提交后要处理的上传脚本。
  • method: 表单提交的方法,这里使用post
  • enctype: 表单的编码类型,multipart/form-data允许上传文件。

二、PHP文件上传处理

2.1 接收上传文件

在PHP脚本中,可以使用$_FILES超全局变量接收上传的文件信息。

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $file = $_FILES["fileToUpload"];
}

2.2 文件验证

  • 检查$file是否为空。
  • 检查文件类型是否为图片。
  • 检查文件大小是否符合要求。
if ($file["error"] === UPLOAD_ERR_OK) {
  $fileType = $file["type"];
  $fileSize = $file["size"];
  
  // 检查文件类型
  if (in_array($fileType, array('image/jpeg', 'image/png', 'image/gif'))) {
    // 检查文件大小
    if ($fileSize <= 5000000) {
      // 文件验证通过,继续处理上传
    } else {
      echo "文件大小超出";
    }
  } else {
    echo "文件类型不正确";
  }
}

2.3 移动上传文件

验证通过后,将上传的文件移动到服务器上的指定目录。

if (move_uploaded_file($file["tmp_name"], "uploads/" . $file["name"])) {
  echo "文件上传成功";
} else {
  echo "文件上传失败";
}

三、安全存储与高效管理

3.1 安全存储

  • 使用随机文件名存储图片,避免文件名冲突。
  • 对上传的图片进行压缩,减小文件大小。
  • 对上传的图片进行权限设置,访问。
$target_dir = "uploads/";
$target_file = $target_dir . basename(pathinfo($file["name"], PATHINFO_FILENAME)) . "_" . md5(uniqid()) . ".jpg";
$uploadOk = 1;

// 检查目录是否存在
if (!file_exists($target_dir)) {
  mkdir($target_dir, 0777, true);
}

// 检查文件是否已存在
if (file_exists($target_file)) {
  $uploadOk = 0;
}

// 检查文件大小
if ($fileSize > 5000000) {
  $uploadOk = 0;
}

// 检查文件类型
if ($fileType != "image/jpeg" && $fileType != "image/png" && $fileType != "image/gif") {
  $uploadOk = 0;
}

if ($uploadOk == 1) {
  if (move_uploaded_file($file["tmp_name"], $target_file)) {
    echo "文件上传成功";
  } else {
    echo "文件上传失败";
  }
}

3.2 高效管理

  • 使用数据库存储图片信息,如图片名称、上传时间、文件路径等。
  • 对图片进行分类,方便用户查找和管理。
  • 使用缓存技术,提高图片访问速度。

结语