引言

图片上传基本原理

  1. 表单提交:用户通过表单选择图片并提交。
  2. PHP接收:PHP脚本接收上传的图片。
  3. 图片处理:对上传的图片进行验证、重命名、压缩等处理。
  4. 图片保存:将处理后的图片保存到服务器。

一、创建上传表单

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="image" />
    <input type="submit" value="上传" />
</form>

二、接收上传的图片

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
    // 获取上传文件的信息
    $image = $_FILES['image'];
    // ... 处理图片
}

这里,我们首先判断是否为POST请求且image文件是否已上传。

三、验证上传的图片

1. 检查文件类型

if (!isset($image['type']) || $image['type'] != 'image/jpeg' && $image['type'] != 'image/png' && $image['type'] != 'image/gif') {
    die('非法文件类型');
}

2. 检查文件大小

$max_size = 2 * 1024 * 1024; // 2MB
if ($image['size'] > $max_size) {
    die('文件过大');
}

这里,我们设置文件大小上限为2MB。

3. 检查文件是否损坏

if (!getimagesize($image['tmp_name'])) {
    die('文件损坏');
}

四、处理上传的图片

1. 重命名图片

$target_path = "uploads/" . md5(uniqid(rand(), true)) . '.' . pathinfo($image['name'], PATHINFO_EXTENSION);

这里,我们使用md5uniqid函数生成唯一的文件名,避免文件名冲突。

2. 压缩图片

list($width, $height) = getimagesize($image['tmp_name']);
$scale = min($width / 500, $height / 500);
$new_width = $width / $scale;
$new_height = $height / $scale;

$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($image['tmp_name']);

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

imagejpeg($image_p, $target_path);

五、保存处理后的图片

move_uploaded_file($image['tmp_name'], $target_path);

总结