核心概念:HTML vs. PHP
想象一下你要盖一栋房子:

- HTML (超文本标记语言) 就像是 房子的毛坯房和结构,它定义了网页的骨架和内容,比如哪里是标题 (
<h1>),哪里是段落 (<p>),哪里是图片 (<img>),哪里是表单 (<form>),浏览器直接读取 HTML 文件,并将其渲染成我们看到的网页。 - PHP (超文本预处理器) 就像是 房子的水电系统和装修工人,它是一种服务器端脚本语言,当用户请求一个 PHP 文件时,服务器会先执行 PHP 代码,然后将执行结果(通常是纯 HTML 代码)发送到用户的浏览器,浏览器最终看到的,依然是 HTML,但它永远不会看到 PHP 的代码。
一句话总结:
- HTML 负责展示 静态 的内容和结构。
- PHP 负责在服务器上 动态 生成内容,然后交给 HTML 来展示。
它们如何协同工作?(一个简单的例子)
让我们通过一个常见的例子来理解:显示用户的欢迎信息。
HTML 文件 (welcome.html - 纯静态页面)
这是一个标准的 HTML 文件,内容是固定的。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">欢迎页面</title>
</head>
<body>
<h1>欢迎访问我们的网站!</h1>
<p>这是一个静态的HTML页面。</p>
</body>
</html>
无论谁来访问这个页面,看到的都是完全一样的内容。

PHP 文件 (welcome.php - 动态页面)
我们想让这个页面根据访问者显示不同的欢迎信息,这时就需要 PHP 了。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">欢迎页面 (PHP)</title>
</head>
<body>
<h1>欢迎访问我们的网站!</h1>
<?php
// PHP 代码必须写在 <?php ... ?> 标签内
// 假设我们从数据库或登录系统中获取了用户名
// 这里为了演示,我们直接定义一个变量
$username = "张三";
// 使用 echo 语句将 PHP 变量的值输出到 HTML 中
echo "<p>你好, " . $username . "!这是一个动态生成的PHP页面。</p>";
// 也可以直接输出HTML标签
echo "<p>当前时间是: " . date("Y-m-d H:i:s") . "</p>";
?>
</body>
</html>
工作流程:
- 用户在浏览器中输入
http://yourdomain.com/welcome.php并访问。 - 服务器接收到请求,发现这是一个
.php文件。 - 服务器启动 PHP 引擎来处理这个文件。
- PHP 引擎执行
<?php ... ?>标签内的代码:- 它定义了变量
$username为 "张三"。 - 它执行
echo语句,将字符串和变量$username的内容拼接成一段 HTML 代码:<p>你好, 张三!这是一个动态生成的PHP页面。</p>。 - 它执行
date()函数,获取当前时间并生成另一段 HTML 代码。
- 它定义了变量
- PHP 引擎将所有 PHP 代码执行完毕后,将剩下的所有内容(包括 PHP 生成的 HTML 和原有的 HTML)组合成一个纯 HTML 文件。
- 服务器将这个最终的纯 HTML 文件发送到用户的浏览器。
- 浏览器接收到这个纯 HTML 文件,并渲染成用户看到的网页。
用户最终在浏览器中看到的源代码是:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">欢迎页面 (PHP)</title>
</head>
<body>
<h1>欢迎访问我们的网站!</h1>
<p>你好, 张三!这是一个动态生成的PHP页面。</p>
<p>当前时间是: 2025-10-27 10:30:00</p>
</body>
</html>
你会发现,用户永远无法看到 <?php ... ?> 里面的代码,那部分是“幕后”工作的。

网站建设中的实际应用场景
数据库交互(PHP 的核心优势)
这是 PHP 最强大的地方,几乎所有动态网站都离不开数据库。
- 用户登录/注册:用户提交表单(HTML),PHP 接收数据,在数据库中查询或插入记录。
- 内容管理系统:管理员通过后台(HTML表单)发布文章,PHP 将文章内容保存到数据库,用户访问网站时,PHP 从数据库中读取文章内容,动态生成 HTML 页面展示出来。
- 电商网站:商品列表、购物车、订单处理等,全部依赖 PHP 与数据库交互。
示例:从数据库读取文章并显示
// connect_to_database.php (假设这是连接数据库的文件)
$pdo = new PDO('mysql:host=localhost;dbname=my_blog', 'user', 'password');
// article.php
<?php
require 'connect_to_database.php'; // 引入数据库连接文件
// 从数据库中获取所有文章
$stmt = $pdo->query("SELECT title, content FROM articles ORDER BY created_at DESC");
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>我的博客</title>
</head>
<body>
<h1>最新文章</h1>
<?php foreach ($articles as $article): ?>
<article>
<h2><?php echo htmlspecialchars($article['title']); ?></h2>
<p><?php echo nl2br(htmlspecialchars($article['content'])); ?></p>
</article>
<?php endforeach; ?>
</body>
</html>
用户会话管理
使用 PHP 可以创建和管理用户登录状态(Session)。
// login.php
<?php
session_start(); // 启动会话
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// 验证用户名密码... (假设验证成功)
if ($username === 'admin' && $password === 'password') {
$_SESSION['logged_in'] = true; // 在服务器端创建一个会话变量
$_SESSION['user_name'] = $username;
header('Location: dashboard.php'); // 重定向到仪表盘
exit();
}
}
?>
<!-- login.html (通常是同一个文件) -->
<!DOCTYPE html>
<html>
<head><title>登录</title></head>
<body>
<form method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
包含文件(代码复用)
为了避免在每个页面都重复写页头、页脚、导航栏等代码,PHP 提供了 include 和 require 函数。
header.php
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">我的网站 - <?php echo $page_title; ?></title>
</head>
<body>
<header>
<nav>
<a href="index.php">首页</a> |
<a href="about.php">关于我们</a> |
<a href="contact.php">联系我们</a>
</nav>
</header>
<main>
footer.php
</main>
<footer>
<p>© 2025 我的网站. 版权所有.</p>
</footer>
</body>
</html>
index.php
<?php $page_title = "首页"; // 定义页面标题变量 require 'header.php'; // 包含页头 ?> <h1>欢迎来到首页!</h1> <p>这里是首页的主要内容。</p> <?php require 'footer.php'; // 包含页脚 ?>
这样做的好处是:
- 代码复用:修改导航栏只需要修改
header.php一个文件。 - 易于维护:结构清晰,分工明确。
总结与最佳实践
| 特性 | HTML 文件 | PHP 文件 |
|---|---|---|
| 角色 | 网页的结构和内容(前端) | 服务器端的逻辑和数据处理(后端) |
| 执行位置 | 在用户的浏览器中执行 | 在 Web 服务器上执行 |
| 文件扩展名 | .html, .htm |
.php |
| 可见性 | 用户可以看到最终渲染的 HTML | 用户无法看到 PHP 源代码 |
| 核心功能 | 展示静态文本、图片、链接等 | 连接数据库、处理表单、管理会话、动态生成内容 |
最佳实践:
- 职责分离:尽量保持 HTML 负责展示,PHP 负责逻辑,避免在 HTML 中写复杂的 PHP 逻辑,也避免在 PHP 中拼接大量 HTML 字符串(可以使用模板引擎如 Twig 来优化)。
- 安全第一:
- 永远不要信任用户输入,使用
htmlspecialchars()函数来防止 XSS 攻击。 - 使用 预处理语句 来防止 SQL 注入攻击(如上面 PDO 示例)。
- 永远不要信任用户输入,使用
- 使用
require和include:这是构建可维护网站的基本功。 - 学习 MVC 模式:对于大型项目,学习模型-视图-控制器架构是进阶的关键,它将数据模型、业务逻辑和用户界面清晰地分离开,使代码更加健壮和易于扩展。
通过 PHP 和 HTML 的结合,你可以从简单的静态网页,构建出功能强大、交互丰富的动态网站。
