引言
一、PHP图片上传基础知识
1.1 图片上传原理
1.2 PHP上传文件函数
PHP提供了move_uploaded_file()函数用于将上传的文件从临时目录移动到目标目录。该函数确保了文件确实是从HTTP POST请求中上传的,从而防止恶意文件上传。
if (move_uploaded_file($tmp_name, $target_path)) {
// 文件上传成功
} else {
// 文件上传失败
}
1.3 文件上传安全注意事项
- 检查文件类型,确保上传的是图片文件。
- 设置合适的上传文件大小。
- 验证文件名,避免文件名注入攻击。
- 设置目标目录的权限,确保PHP脚本可以写入文件。
二、PHP图片上传实战
2.1 创建上传表单
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="上传" />
</form>
2.2 PHP脚本处理上传
<?php
// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
$image = $_FILES['image'];
$tmp_name = $image['tmp_name'];
$error = $image['error'];
$name = $image['name'];
$size = $image['size'];
$type = $image['type'];
// 检查上传错误
if ($error !== UPLOAD_ERR_OK) {
// 处理错误
}
// 检查文件类型
if ($type !== 'image/jpeg' && $type !== 'image/png' && $type !== 'image/gif') {
// 处理错误
}
// 设置目标路径
$target_path = "uploads/" . basename($name);
// 移动上传的文件
if (move_uploaded_file($tmp_name, $target_path)) {
// 文件上传成功
} else {
// 文件上传失败
}
}
?>
2.3 保存上传的图片
三、进阶技巧
3.1 生成缩略图
// 生成缩略图
$thumbnail_path = "uploads/thumbnail_" . basename($name);
$thumbnail_size = 150; // 缩略图大小
$image = imagecreatefromjpeg($tmp_name);
$thumbnail = imagecreatetruecolor($thumbnail_size, $thumbnail_size);
imagecopyresized($thumbnail, $image, 0, 0, 0, 0, $thumbnail_size, $thumbnail_size, imagesx($image), imagesy($image));
imagejpeg($thumbnail, $thumbnail_path);
3.2 文件名处理
为了避免文件名注入攻击,建议使用basename()函数获取文件名,并使用uniqid()函数生成唯一的文件名。
$name = uniqid() . "_" . basename($name);