引言

准备工作

在开始之前,请确保您的服务器已安装PHP环境,并且GD库已启用。GD库是PHP中用于图像处理的一个扩展库,它支持生成和编辑多种格式的图像。

HTML表单设计

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">请选择图片上传:</label>
        <input type="file" name="file" id="file">
        <input type="submit" value="上传">
    </form>
</body>
</html>

在这个表单中,我们使用了enctype="multipart/form-data"属性,这是必须的,因为它允许表单数据以二进制形式发送,这对于文件上传至关重要。

PHP脚本编写

<?php
// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['file'])) {
    // 获取文件信息
    $file = $_FILES['file'];
    $filename = $file['name'];
    $filetmp = $file['tmp_name'];
    $filetype = $file['type'];
    $filesize = $file['size'];

    // 定义允许的图片类型
    $allowedTypes = array('image/jpeg', 'image/png', 'image/gif');

    // 检查文件类型
    if (in_array($filetype, $allowedTypes)) {
        // 设置上传目录
        $uploadDir = 'uploads/';
        // 移动上传的文件
        if (move_uploaded_file($filetmp, $uploadDir . basename($filename))) {
            echo "文件上传成功: " . $uploadDir . basename($filename);
        } else {
            echo "文件上传失败。";
        }
    } else {
        echo "不支持的文件类型。";
    }
}
?>

注意事项

  • 确保上传目录uploads/存在,并且PHP有写入权限。
  • 为了安全起见,不要直接使用用户上传的文件名,这可能会导致目录遍历攻击。使用basename()函数获取文件名是一个好的做法。
  • 在生产环境中,您可能需要添加更多的安全检查,例如检查文件大小和内容。

总结