引言
图片上传基本原理
- 表单提交:用户通过表单选择图片并提交。
- PHP接收:PHP脚本接收上传的图片。
- 图片处理:对上传的图片进行验证、重命名、压缩等处理。
- 图片保存:将处理后的图片保存到服务器。
一、创建上传表单
<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);
这里,我们使用md5和uniqid函数生成唯一的文件名,避免文件名冲突。
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);