【PHP【实战训练】系统性学习】——最经典的web端头像上传,数据库内容安全精简
<?php
// 连接数据库
$db = new mysqli('localhost', 'username', 'password', 'database');
// 检查连接
if ($db->connect_error) {
die('Connect Error (' . $db->connect_errno . ') ' . $db->connect_error);
}
// 检查是否有文件上传
if (isset($_FILES['avatar'])) {
$file = $_FILES['avatar'];
// 允许的文件类型
$allowedTypes = ['image/jpeg', 'image/png'];
// 允许的文件大小,单位为字节
$maxSize = 200000;
// 检查文件类型和大小
if (in_array($file['type'], $allowedTypes) && $file['size'] <= $maxSize) {
// 文件名
$filename = uniqid('avatar_', true) . '.jpg';
// 文件路径
$filepath = 'uploads/' . $filename;
// 转换图片到JPEG,并压缩
$source = imagecreatefromstring(file_get_contents($file['tmp_name']));
imagejpeg($source, $filepath, 90);
// 获取用户ID
$userId = $_SESSION['user_id'];
// 更新数据库中的头像路径
$stmt = $db->prepare("UPDATE users SET avatar=? WHERE id=?");
$stmt->bind_param('si', $filename, $userId);
$stmt->execute();
// 输出结果
echo "头像上传成功!";
} else {
echo "文件类型不符合要求或文件过大。";
}
} else {
echo "没有文件上传。";
}
?>
这段代码简化了原始代码,去除了不必要的错误处理和冗余的代码逻辑,更加精简和安全。它使用了mysqli来替换mysql,使用参数化查询来防止SQL注入,并使用uniqid生成唯一的文件名,增加了文件类型和大小的限制,以及自动将非JPEG格式的图片转换为JPEG格式。
评论已关闭