php实现相册
实现PHP相册功能
PHP相册功能通常包括图片上传、存储、展示和管理等功能。以下是一个基本的实现方案:
数据库设计
创建一个简单的数据库表来存储图片信息:
CREATE TABLE `photos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`filename` varchar(255) NOT NULL,
`description` text,
`upload_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
图片上传处理
创建上传表单和处理脚本:
<!-- upload_form.html -->
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="text" name="title" placeholder="图片标题">
<textarea name="description" placeholder="图片描述"></textarea>
<input type="file" name="image" accept="image/*">
<button type="submit">上传图片</button>
</form>
// upload.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = "uploads/";
$filename = basename($_FILES["image"]["name"]);
$targetFile = $targetDir . uniqid() . '_' . $filename;
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查是否为真实图片
$check = getimagesize($_FILES["image"]["tmp_name"]);
if ($check === false) {
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["image"]["size"] > 5000000) {
$uploadOk = 0;
}
// 允许特定格式
if (!in_array($imageFileType, ['jpg', 'png', 'jpeg', 'gif'])) {
$uploadOk = 0;
}
if ($uploadOk && move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
// 保存到数据库
$pdo = new PDO('mysql:host=localhost;dbname=photo_gallery', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO photos (title, filename, description, upload_date) VALUES (?, ?, ?, NOW())");
$stmt->execute([$_POST['title'], $targetFile, $_POST['description']]);
header("Location: gallery.php");
} else {
echo "上传失败";
}
}
图片展示
创建图片展示页面:
// gallery.php
$pdo = new PDO('mysql:host=localhost;dbname=photo_gallery', 'username', 'password');
$photos = $pdo->query("SELECT * FROM photos ORDER BY upload_date DESC")->fetchAll();
foreach ($photos as $photo) {
echo '<div class="photo-item">';
echo '<img src="' . htmlspecialchars($photo['filename']) . '" alt="' . htmlspecialchars($photo['title']) . '">';
echo '<h3>' . htmlspecialchars($photo['title']) . '</h3>';
echo '<p>' . htmlspecialchars($photo['description']) . '</p>';
echo '</div>';
}
图片管理
添加删除功能:
// delete.php
if (isset($_GET['id'])) {
$pdo = new PDO('mysql:host=localhost;dbname=photo_gallery', 'username', 'password');
$stmt = $pdo->prepare("SELECT filename FROM photos WHERE id = ?");
$stmt->execute([$_GET['id']]);
$photo = $stmt->fetch();
if ($photo && unlink($photo['filename'])) {
$pdo->prepare("DELETE FROM photos WHERE id = ?")->execute([$_GET['id']]);
}
header("Location: gallery.php");
}
安全考虑
- 对上传文件进行严格验证,包括文件类型、大小和内容
- 使用预处理语句防止SQL注入
- 对输出内容进行HTML转义防止XSS攻击
- 限制上传目录的执行权限
- 为上传文件生成唯一文件名防止文件名冲突
扩展功能建议
- 添加用户系统实现私人相册
- 实现图片分类和标签功能
- 添加图片缩略图生成功能
- 实现图片评论和点赞功能
- 添加图片搜索功能
这个基本实现可以根据需求进行扩展和优化,形成完整的相册系统。







