引言

准备工作

1. PHP环境搭建

<?php
echo extension_loaded('gd');
?>

2. 服务器配置

确保服务器允许文件上传,修改php.ini文件中的以下设置:

  • file_uploads = On
  • upload_max_filesize = 2M
  • post_max_size = 2M
  • max_execution_time = 300

3. HTML表单

<form action="upload.php" method="post" enctype="multipart/form-data">
  <label for="image">选择图片:</label>
  <input type="file" name="image" id="image">
  <input type="submit" value="上传">
</form>

代码实现

1. 上传处理文件

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
    // 获取上传文件的信息
    $file = $_FILES['image'];
    $file_name = $file['name'];
    $file_tmp = $file['tmp_name'];
    $file_size = $file['size'];
    $file_error = $file['error'];
    $file_type = $file['type'];

    // 设置允许的图片类型
    $allowed_types = array('image/jpeg', 'image/png', 'image/gif');
    $file_ext = strtolower(end(explode('.', $file_name)));

    if (in_array($file_ext, $allowed_types) && $file_error === 0) {
        // 生成新文件名
        $new_file_name = uniqid('', true) . '.' . $file_ext;
        // 移动文件到指定目录
        $upload_path = 'uploads/' . $new_file_name;
        if (move_uploaded_file($file_tmp, $upload_path)) {
            echo "文件上传成功: " . $upload_path;
        } else {
            echo "文件上传失败";
        }
    } else {
        echo "不支持的文件类型或发生错误";
    }
}
?>

2. 上传目录

<?php
if (!file_exists('uploads')) {
    mkdir('uploads', 0755, true);
}
?>

注意事项

1. 安全性

  • 永远不要信任客户端上传的文件,确保对文件进行验证。
  • 设置合适的文件大小和类型。
  • 使用move_uploaded_file函数来移动上传的文件,确保文件是上传的而不是其他内容。

2. 性能

  • 对上传的图片进行压缩,以减少文件大小和提高加载速度。
  • 使用异步上传技术,提高用户体验。