本文目录导读:

我来详细介绍几种用 PHP 开发博客的方法,从简单到复杂都有:
最简单的方式:使用现成 CMS
WordPress(最推荐)
// 如果你想要最快速的方式,直接安装 WordPress // 1. 下载 WordPress // 2. 上传到服务器 // 3. 运行安装向导 // 4. 选择主题和插件
优势:
- 大量免费主题和插件
- 强大的后台管理系统
- SEO 优化良好
- 社区支持庞大
其他 CMS 选择
- Typecho - 轻量级,适合个人博客
- Z-Blog - 中文支持好
- Ghost(基于 Node.js,但 PHP 也可以用)
使用 PHP 框架开发
Laravel 博客示例
// 创建项目 composer create-project laravel/laravel my-blog // 创建数据模型 php artisan make:model Post -m
数据库迁移文件:
// database/migrations/create_posts_table.php
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->string('slug')->unique();
$table->foreignId('user_id')->constrained();
$table->timestamps();
});
}
路由配置:
// routes/web.php
Route::get('/', [PostController::class, 'index']);
Route::get('/post/{slug}', [PostController::class, 'show']);
Route::resource('/admin/posts', PostController::class)->middleware('auth');
控制器:
class PostController extends Controller
{
public function index()
{
$posts = Post::latest()->paginate(10);
return view('blog.index', compact('posts'));
}
public function show($slug)
{
$post = Post::where('slug', $slug)->firstOrFail();
return view('blog.single', compact('post'));
}
}
纯 PHP 手写简单博客
<?php
// 简单的 MySQL 连接
class Blog {
private $pdo;
public function __construct() {
$this->pdo = new PDO(
'mysql:host=localhost;dbname=blog',
'username',
'password'
);
}
// 获取所有文章
public function getPosts() {
$stmt = $this->pdo->query("SELECT * FROM posts ORDER BY created_at DESC");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// 获取单篇文章
public function getPost($id) {
$stmt = $this->pdo->prepare("SELECT * FROM posts WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
// 创建文章
public function createPost($title, $content) {
$stmt = $this->pdo->prepare(
"INSERT INTO posts (title, content) VALUES (?, ?)"
);
return $stmt->execute([$title, $content]);
}
}
?>
推荐的开发路线
Step 1: 基础功能
- 文章 CRUD(增删改查)
- 用户认证
- 评论系统
Step 2: 进阶功能
- 标签和分类
- 搜索功能
- 分页
- 图片上传
Step 3: 优化
- SEO
- 缓存
- 安全防护
- 响应式设计
实用代码示例
分页功能
<?php
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$posts = $pdo->prepare(
"SELECT * FROM posts ORDER BY created_at DESC LIMIT $offset, $perPage"
);
$posts->execute();
$results = $posts->fetchAll();
// 生成分页链接
echo '<div class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
echo '</div>';
?>
文章搜索
<?php
if (isset($_GET['q'])) {
$search = "%{$_GET['q']}%";
$stmt = $pdo->prepare(
"SELECT * FROM posts WHERE title LIKE ? OR content LIKE ?"
);
$stmt->execute([$search, $search]);
$results = $stmt->fetchAll();
}
?>
最佳实践建议
学习路径
-
先掌握 PHP 基础
- 变量、数组、函数
- 面向对象编程
- MySQL 数据库操作
-
学习 Laravel 框架(推荐)
- MVC 架构
- Eloquent ORM
- Blade 模板
-
实践项目
- 从简单博客开始
- 逐步增加功能
示例:简单的博客页面结构
<!-- index.php -->
<?php include 'header.php'; ?>
<?php foreach ($posts as $post): ?>
<article>
<h2>
<a href="/post.php?id=<?= $post['id'] ?>">
<?= htmlspecialchars($post['title']) ?>
</a>
</h2>
<p><?= substr($post['content'], 0, 200) ?>...</p>
<small>
<?= date('Y-m-d', strtotime($post['created_at'])) ?>
</small>
</article>
<?php endforeach; ?>
<?php include 'footer.php'; ?>
推荐工具和资源
开发环境
- XAMPP/WAMP - 本地开发
- VS Code/PhpStorm - 编辑器
- composer - 依赖管理
学习资源
托管选择
- 虚拟主机 - 简单便宜
- VPS - 更灵活
- 云服务器 - 可扩展
建议:如果你赶时间或想省心,直接用 WordPress;如果想学习技术或想要完全控制,推荐用 Laravel 开发,最重要的是打好 PHP 基础,理解面向对象编程和数据库操作。