php实现表情上传
实现表情上传功能
前端部分
HTML表单需要设置enctype="multipart/form-data"以支持文件上传
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="emoji" accept="image/*">
<button type="submit">上传表情</button>
</form>
后端处理 PHP接收文件并验证处理
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = "uploads/emojis/";
$allowedTypes = ['image/png', 'image/jpeg', 'image/gif'];
$file = $_FILES['emoji'];
$fileType = $file['type'];
$fileSize = $file['size'];
// 验证文件类型
if (!in_array($fileType, $allowedTypes)) {
die("只允许上传PNG,JPEG,GIF格式的图片");
}
// 验证文件大小(示例限制为1MB)
if ($fileSize > 1048576) {
die("文件大小不能超过1MB");
}
// 生成唯一文件名
$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
$newFilename = uniqid() . '.' . $extension;
$targetPath = $targetDir . $newFilename;
// 移动文件到目标目录
if (move_uploaded_file($file['tmp_name'], $targetPath)) {
echo "表情上传成功!";
} else {
echo "上传失败,请重试";
}
}
?>
安全注意事项
确保上传目录有正确的权限设置
// 设置上传目录权限
if (!is_dir($targetDir)) {
mkdir($targetDir, 0755, true);
}
// 防止目录遍历攻击
$targetPath = realpath($targetDir) . DIRECTORY_SEPARATOR . $newFilename;
if (strpos($targetPath, realpath($targetDir)) !== 0) {
die("非法文件路径");
}
数据库存储(可选)
如果需要记录上传信息,可以建立数据库表存储文件信息
CREATE TABLE emojis (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
upload_time DATETIME DEFAULT CURRENT_TIMESTAMP,
user_id INT
);
PHP插入数据库记录
// 假设已建立数据库连接$pdo
$stmt = $pdo->prepare("INSERT INTO emojis (filename, user_id) VALUES (?, ?)");
$stmt->execute([$newFilename, $_SESSION['user_id']]);
显示上传的表情
从目录读取并显示表情图片
$emojis = glob($targetDir . "*.{png,jpg,jpeg,gif}", GLOB_BRACE);
foreach ($emojis as $emoji) {
echo '<img src="' . htmlspecialchars($emoji) . '" style="width:50px;height:50px;">';
}






