php相册实现
实现PHP相册的基本步骤
创建一个PHP相册需要处理图片上传、存储、显示和管理等功能。以下是实现的基本流程和代码示例。
数据库设计
创建一个数据库表来存储图片信息,例如:
CREATE TABLE photos (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
filename VARCHAR(255),
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
图片上传功能
创建一个表单用于上传图片,并处理上传逻辑:

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="photo" accept="image/*">
<input type="text" name="title" placeholder="Title">
<textarea name="description" placeholder="Description"></textarea>
<button type="submit">Upload</button>
</form>
处理上传的PHP代码(upload.php):
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'];
$description = $_POST['description'];
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["photo"]["name"]);
if (move_uploaded_file($_FILES["photo"]["tmp_name"], $targetFile)) {
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO photos (title, description, filename) VALUES (?, ?, ?)");
$stmt->execute([$title, $description, $_FILES["photo"]["name"]]);
echo "Image uploaded successfully.";
} else {
echo "Error uploading image.";
}
}
?>
图片展示功能
创建一个页面来显示所有上传的图片:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$stmt = $pdo->query("SELECT * FROM photos ORDER BY upload_date DESC");
$photos = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<div class="gallery">
<?php foreach ($photos as $photo): ?>
<div class="photo">
<img src="uploads/<?php echo htmlspecialchars($photo['filename']); ?>" alt="<?php echo htmlspecialchars($photo['title']); ?>">
<h3><?php echo htmlspecialchars($photo['title']); ?></h3>
<p><?php echo htmlspecialchars($photo['description']); ?></p>
</div>
<?php endforeach; ?>
</div>
图片管理功能
添加删除和编辑功能,例如删除图片的代码:
<?php
if (isset($_GET['delete_id'])) {
$id = $_GET['delete_id'];
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$stmt = $pdo->prepare("SELECT filename FROM photos WHERE id = ?");
$stmt->execute([$id]);
$photo = $stmt->fetch(PDO::FETCH_ASSOC);
if ($photo && unlink("uploads/" . $photo['filename'])) {
$stmt = $pdo->prepare("DELETE FROM photos WHERE id = ?");
$stmt->execute([$id]);
echo "Image deleted successfully.";
} else {
echo "Error deleting image.";
}
}
?>
安全性考虑
确保上传的文件是图片,并防止文件名冲突:
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($_FILES["photo"]["type"], $allowedTypes)) {
die("Only JPG, PNG, and GIF files are allowed.");
}
$extension = pathinfo($_FILES["photo"]["name"], PATHINFO_EXTENSION);
$newFilename = uniqid() . '.' . $extension;
$targetFile = $targetDir . $newFilename;
前端优化
使用CSS和JavaScript优化相册的显示效果,例如使用Lightbox插件实现图片弹窗查看:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.3/css/lightbox.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.3/js/lightbox.min.js"></script>
<a href="uploads/<?php echo $photo['filename']; ?>" data-lightbox="gallery" data-title="<?php echo $photo['title']; ?>">
<img src="uploads/<?php echo $photo['filename']; ?>" alt="<?php echo $photo['title']; ?>">
</a>
通过以上步骤,可以实现一个基本的PHP相册功能,包括上传、显示和管理图片。






