引言

前端表单设计

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>图片上传表单</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <h2>上传图片</h2>
        <label for="fileSelect">选择图片:</label>
        <input type="file" name="photo" id="fileSelect" accept="image/*">
        <input type="submit" name="submit" value="上传">
    </form>
</body>
</html>

在这个表单中,enctype="multipart/form-data" 是必须的,因为它允许表单数据以文件形式上传。

后端处理

<?php
// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['photo'])) {
    $file = $_FILES['photo'];
    $upload_dir = "uploads/";
    $upload_path = $upload_dir . basename($file['name']);

    // 检查文件大小和类型
    $max_size = 5 * 1024 * 1024; // 5MB
    $allowed_types = array('image/jpeg', 'image/png', 'image/gif');

    if ($file['size'] <= $max_size && in_array($file['type'], $allowed_types)) {
        // 移动文件到上传目录
        if (move_uploaded_file($file['tmp_name'], $upload_path)) {
            echo "文件上传成功!";
        } else {
            echo "文件上传失败。";
        }
    } else {
        echo "文件大小或类型不正确。";
    }
}
?>

在这个脚本中,我们首先检查是否有文件被上传,然后设置上传目录和路径。接着,我们检查文件的大小和类型是否符合要求。如果一切正常,我们使用 move_uploaded_file 函数将文件从临时目录移动到目标目录。

图片存储

安全性考虑

在处理文件上传时,安全性是非常重要的。以下是一些安全性的考虑:

  • 检查文件类型:确保上传的文件确实是图片,以避免恶意文件上传。
  • 文件大小:防止上传过大的文件,这可能是一种拒绝服务攻击。
  • 避免直接使用用户上传的文件名:这可能导致路径遍历攻击。使用 basenameuniqid 函数来生成安全的文件名。
  • 设置正确的文件权限:确保上传目录的权限不会允许用户写入其他类型的文件。

总结