php相册实现
实现PHP相册的基本步骤
创建一个PHP相册需要处理图片上传、存储、显示和管理等功能。以下是实现的基本方法:
数据库设计
创建数据库表存储图片信息,通常包括字段如id、filename、title、description、upload_date等。示例SQL:
CREATE TABLE photos (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
title VARCHAR(100),
description TEXT,
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
文件上传处理 创建HTML表单接收文件上传,PHP处理上传逻辑:

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['photo'])) {
$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"] > 500000) {
$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 (filename, title, description) VALUES (?, ?, ?)");
$stmt->execute([basename($targetFile), $_POST['title'], $_POST['description']]);
}
}
图片显示 从数据库获取图片列表并显示:
$stmt = $pdo->query("SELECT * FROM photos ORDER BY upload_date DESC");
while ($row = $stmt->fetch()) {
echo '<div class="photo-item">';
echo '<img src="uploads/' . htmlspecialchars($row['filename']) . '" alt="' . htmlspecialchars($row['title']) . '">';
echo '<h3>' . htmlspecialchars($row['title']) . '</h3>';
echo '<p>' . htmlspecialchars($row['description']) . '</p>';
echo '</div>';
}
图片管理 实现删除功能:

if (isset($_GET['delete'])) {
$id = $_GET['delete'];
$stmt = $pdo->prepare("SELECT filename FROM photos WHERE id = ?");
$stmt->execute([$id]);
$filename = $stmt->fetchColumn();
unlink("uploads/" . $filename);
$stmt = $pdo->prepare("DELETE FROM photos WHERE id = ?");
$stmt->execute([$id]);
}
安全注意事项
确保上传目录不可执行PHP脚本,建议将上传目录放在web根目录之外,或添加.htaccess限制:
php_flag engine off
验证文件类型时不应仅依赖扩展名,应使用getimagesize()或finfo_file()检测实际文件类型。
扩展功能建议
添加用户系统实现私人相册,使用GD库或Imagick生成缩略图,实现相册分类和标签功能,增加AJAX上传体验。
性能优化
对于大量图片,考虑分页显示,使用缓存技术减少数据库查询,对图片进行压缩优化加载速度。






