php 个人博客实现
环境准备
安装PHP运行环境(如XAMPP、WAMP或单独安装Apache+PHP+MySQL)。确保PHP版本在7.4以上以获得更好的兼容性。MySQL用于存储博客数据,需提前创建数据库。
数据库设计
创建名为blog的数据库,设计核心表:
- posts表:存储文章信息,字段包括
id(主键)、title(标题)、content(内容)、created_at(发布时间)。 - users表:管理后台用户,字段包括
id、username、password(需加密存储)。
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
);
核心功能实现
连接数据库
创建config.php文件管理数据库连接:
<?php
$host = 'localhost';
$dbname = 'blog';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Database connection failed: " . $e->getMessage());
}
?>
文章列表展示
创建index.php显示文章列表:
<?php
include 'config.php';
$stmt = $pdo->query("SELECT * FROM posts ORDER BY created_at DESC");
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<?php foreach ($posts as $post): ?>
<h2><?= htmlspecialchars($post['title']) ?></h2>
<p><?= nl2br(htmlspecialchars($post['content'])) ?></p>
<small><?= $post['created_at'] ?></small>
<hr>
<?php endforeach; ?>
</body>
</html>
后台管理功能
用户登录验证
创建login.php处理登录逻辑(使用password_hash存储密码):
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
include 'config.php';
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header("Location: admin.php");
} else {
echo "Invalid credentials";
}
}
文章发布功能
在admin.php中实现表单提交:
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
include 'config.php';
$title = $_POST['title'];
$content = $_POST['content'];
$stmt = $pdo->prepare("INSERT INTO posts (title, content) VALUES (?, ?)");
$stmt->execute([$title, $content]);
header("Location: admin.php");
}
?>
安全与优化
- 输入过滤:始终使用
htmlspecialchars和预处理语句防止XSS和SQL注入。 - 密码加密:注册时使用
password_hash,登录时用password_verify校验。 - 文件结构:建议按功能分目录(如
/public放前端文件,/includes放PHP类库)。
扩展建议
- 添加Markdown编辑器(如SimpleMDE)提升内容编辑体验。
- 实现分页功能(SQL中使用
LIMIT和OFFSET)。 - 部署时配置HTTPS并限制敏感目录访问(如通过
.htaccess)。







