php实现相册
PHP 相册实现方法
数据库设计
创建数据库表存储相册信息,例如:
CREATE TABLE albums (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE photos (
id INT AUTO_INCREMENT PRIMARY KEY,
album_id INT,
filename VARCHAR(255) NOT NULL,
caption TEXT,
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (album_id) REFERENCES albums(id)
);
文件上传处理
创建文件上传表单和处理脚本:
// 上传处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["photo"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查是否为真实图片
$check = getimagesize($_FILES["photo"]["tmp_name"]);
if ($check !== false) {
$uploadOk = 1;
} else {
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["photo"]["size"] > 5000000) {
$uploadOk = 0;
}
// 允许特定格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
$uploadOk = 0;
}
if ($uploadOk == 1) {
move_uploaded_file($_FILES["photo"]["tmp_name"], $targetFile);
// 保存到数据库
$stmt = $pdo->prepare("INSERT INTO photos (album_id, filename) VALUES (?, ?)");
$stmt->execute([$albumId, basename($_FILES["photo"]["name"])]);
}
}
相册显示
创建相册浏览页面:
// 获取相册列表
$albums = $pdo->query("SELECT * FROM albums")->fetchAll();
foreach ($albums as $album) {
echo "<h3>{$album['title']}</h3>";
echo "<p>{$album['description']}</p>";
// 获取相册照片
$photos = $pdo->prepare("SELECT * FROM photos WHERE album_id = ?");
$photos->execute([$album['id']]);
echo '<div class="photo-grid">';
foreach ($photos as $photo) {
echo "<img src='uploads/{$photo['filename']}' alt='{$photo['caption']}'>";
}
echo '</div>';
}
安全性考虑
- 使用预处理语句防止SQL注入
- 验证上传文件类型和大小
- 重命名上传文件避免冲突
- 设置文件上传目录权限
扩展功能
- 添加用户认证系统
- 实现照片缩略图生成
- 添加评论功能
- 支持多相册分类
- 实现照片排序和分页
前端界面建议
使用HTML/CSS创建响应式布局:
<div class="album-container">
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="photo" accept="image/*">
<input type="submit" value="上传">
</form>
<div class="albums">
<!-- PHP生成的相册内容 -->
</div>
</div>
.photo-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 10px;
}
.photo-grid img {
width: 100%;
height: auto;
border-radius: 5px;
}
性能优化
- 使用缓存技术减少数据库查询
- 对大型图片进行压缩处理
- 实现延迟加载(Lazy Load)提升页面加载速度
- 考虑使用CDN存储图片文件







