PHP入门教程:从零搭建你的第一个动态网站

1. 前言:为什么2026年还要学习PHP?

PHP已经走过了30年,依然是Web开发的中流砥柱。WordPress、Laravel、ThinkPHP等主流系统均基于PHP构建,全球超过75%的网站运行在PHP之上。2026年,PHP 8.x版本带来了JIT编译、类型系统增强、性能大幅提升,让这门老牌语言焕发新生。

本教程能带给你什么?
✅ 零基础理解PHP工作原理
✅ 掌握PHP核心语法(变量、函数、数组、表单处理)
✅ 学习MySQL数据库操作
✅ 实战搭建完整的留言本系统
✅ 了解Laravel框架入门

本教程假设你有HTML基础,无需任何后端经验。

2. PHP核心概念速览

PHP是什么?
PHP(Hypertext Preprocessor)是一种运行在服务器端的脚本语言,专门用于Web开发。PHP代码被服务器执行后生成HTML返回给浏览器。

PHP能做什么?
✅ 处理表单数据(登录、注册、搜索)
✅ 操作数据库(增删改查)
✅ 文件上传下载、生成图片、发送邮件
✅ 开发API接口、Session/Cookie管理

学习PHP需要掌握:HTML/CSS基础 + PHP语法 + MySQL数据库

3. 环境搭建:安装PHP开发环境

2026年推荐使用集成环境,一键安装Apache+PHP+MySQL。

3.1 Windows用户:安装XAMPP

访问 XAMPP官网 下载安装,启动Apache和MySQL服务。网站根目录在 C:\xampp\htdocs

3.2 Mac用户:安装MAMP

访问 MAMP官网 下载免费版,启动后网站根目录在 /Applications/MAMP/htdocs

3.3 验证安装

在根目录创建 info.php

<?php phpinfo(); ?>

访问 http://localhost/info.php,看到PHP信息页面即成功。

4. PHP基础语法

4.1 基础语法结构

创建 hello.php

<!DOCTYPE html>
<html>
<head><title>PHP教程</title></head>
<body>
    <h1><?php echo "Hello, PHP 2026!"; ?></h1>
    <?php
        // 单行注释
        /* 多行注释 */
        $name = "小明";
        $age = 25;
        $price = 99.99;
        $isStudent = true;
        echo "<p>姓名:$name,年龄:$age</p>";
    ?>
</body>
</html>

4.2 变量与常量

<?php
    $name = "张三";           // 字符串
    $age = 18;               // 整数
    $score = 95.5;           // 浮点数
    $isPass = true;          // 布尔值
    define("SITE_NAME", "我的网站");
    echo SITE_NAME;
?>

4.3 数组

<?php
    $fruits = array("苹果", "香蕉", "橘子");
    echo $fruits[0];  // 苹果
    $user = [
        "name" => "李四",
        "age" => 20,
        "city" => "北京"
    ];
    echo $user["name"];
    // 遍历数组
    foreach($fruits as $fruit) {
        echo "<p>$fruit</p>";
    }
?>

4.4 条件判断与循环

<?php
    $score = 85;
    if($score >= 90) {
        echo "优秀";
    } elseif($score >= 60) {
        echo "及格";
    } else {
        echo "不及格";
    }
    for($i = 1; $i <= 5; $i++) {
        echo "数字:$i<br>";
    }
    $count = 0;
    while($count < 3) {
        echo "循环:$count<br>";
        $count++;
    }
?>

4.5 函数

<?php
    function greet($name) {
        return "你好,$name!";
    }
    echo greet("PHP新手");
    function add($a, $b) {
        return $a + $b;
    }
    echo "5 + 3 = " . add(5, 3);
?>

4.6 表单处理(GET与POST)

创建 form.php

<!DOCTYPE html>
<html>
<head><title>表单示例</title></head>
<body>
    <form method="POST" action="">
        <input type="text" name="username" placeholder="用户名">
        <button type="submit">提交</button>
    </form>
    <?php
        if($_SERVER["REQUEST_METHOD"] == "POST") {
            $username = htmlspecialchars($_POST["username"]);
            echo "<p>你好,$username!</p>";
        }
    ?>
</body>
</html>

5. 数据库操作:MySQL基础

5.1 创建数据库和数据表

打开phpMyAdmin(http://localhost/phpmyadmin),执行以下SQL:

CREATE DATABASE myblog;
USE myblog;
CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

5.2 使用PDO连接数据库

PDO是PHP推荐的数据库操作方式,安全且支持多种数据库。创建 db.php

<?php
    $host = 'localhost';
    $dbname = 'myblog';
    $username = 'root';
    $password = '';
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "数据库连接成功";
    } catch(PDOException $e) {
        die("连接失败:" . $e->getMessage());
    }
?>

5.3 数据查询与插入

<?php
    require_once 'db.php';
    // 插入数据
    $sql = "INSERT INTO messages (username, content) VALUES (:username, :content)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':username' => '张三', ':content' => '这是我的第一条留言']);
    echo "插入成功,ID:" . $pdo->lastInsertId();
    // 查询数据
    $sql = "SELECT * FROM messages ORDER BY created_at DESC";
    $stmt = $pdo->query($sql);
    $messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach($messages as $msg) {
        echo "<p>{$msg['username']}:{$msg['content']} ({$msg['created_at']})</p>";
    }
?>

6. 实战项目:留言本系统

创建一个完整的留言本系统,包含发表留言、显示留言、删除留言功能。

6.1 数据库准备

CREATE TABLE guestbook (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    message TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

6.2 创建项目文件

在htdocs目录下创建 guestbook 文件夹,添加以下文件。

config.php(数据库配置):

<?php
    $host = 'localhost';
    $dbname = 'myblog';
    $user = 'root';
    $pass = '';
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        die("数据库连接失败:" . $e->getMessage());
    }
?>

index.php(留言本主页面):

<?php require_once 'config.php'; ?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>PHP留言本系统</title>
    <style>
        *{margin:0;padding:0;box-sizing:border-box;}
        body{background:linear-gradient(135deg,#667eea,#764ba2);min-height:100vh;padding:40px;font-family:system-ui;}
        .container{max-width:800px;margin:0 auto;background:#fff;border-radius:20px;padding:30px;box-shadow:0 20px 40px rgba(0,0,0,0.2);}
        h1{text-align:center;color:#333;margin-bottom:30px;}
        .form-group{margin-bottom:20px;}
        label{display:block;margin-bottom:8px;font-weight:bold;color:#555;}
        input,textarea{width:100%;padding:12px;border:1px solid #ddd;border-radius:10px;font-size:16px;}
        textarea{resize:vertical;min-height:100px;}
        button{background:#667eea;color:#fff;border:none;padding:12px 30px;border-radius:10px;cursor:pointer;font-size:16px;}
        .message-list{margin-top:30px;}
        .message-item{background:#f8f9fa;border-radius:12px;padding:15px;margin-bottom:15px;}
        .message-header{display:flex;justify-content:space-between;margin-bottom:10px;color:#667eea;font-weight:bold;}
        .message-date{color:#999;font-size:12px;}
        .message-content{color:#333;line-height:1.6;}
        .delete-btn{color:#e74c3c;text-decoration:none;font-size:12px;}
        .empty{text-align:center;color:#999;padding:40px;}
    </style>
</head>
<body>
<div class="container">
    <h1>📝 留言本系统</h1>
    <form method="POST" action="submit.php">
        <div class="form-group">
            <label>昵称:</label>
            <input type="text" name="name" required placeholder="请输入昵称">
        </div>
        <div class="form-group">
            <label>留言内容:</label>
            <textarea name="message" required placeholder="请输入留言..."></textarea>
        </div>
        <button type="submit">发表留言</button>
    </form>
    <div class="message-list">
        <h3>最新留言</h3>
        <?php
            $stmt = $pdo->query("SELECT * FROM guestbook ORDER BY created_at DESC");
            $messages = $stmt->fetchAll();
            if(count($messages) > 0) {
                foreach($messages as $msg) {
                    echo '<div class="message-item">';
                    echo '<div class="message-header">';
                    echo '<span>👤 ' . htmlspecialchars($msg['name']) . '</span>';
                    echo '<div><span class="message-date">' . $msg['created_at'] . '</span>';
                    echo ' <a href="delete.php?id=' . $msg['id'] . '" class="delete-btn" onclick="return confirm(\'确定删除吗?\')">删除</a></div>';
                    echo '</div>';
                    echo '<div class="message-content">' . nl2br(htmlspecialchars($msg['message'])) . '</div>';
                    echo '</div>';
                }
            } else {
                echo '<div class="empty">暂无留言,抢个沙发吧!</div>';
            }
        ?>
    </div>
</div>
</body>
</html>

submit.php(处理留言提交):

<?php
    require_once 'config.php';
    if($_SERVER["REQUEST_METHOD"] == "POST") {
        $name = htmlspecialchars($_POST['name']);
        $message = htmlspecialchars($_POST['message']);
        $sql = "INSERT INTO guestbook (name, message) VALUES (:name, :message)";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([':name' => $name, ':message' => $message]);
    }
    header("Location: index.php");
    exit();
?>

delete.php(删除留言):

<?php
    require_once 'config.php';
    if(isset($_GET['id'])) {
        $id = intval($_GET['id']);
        $sql = "DELETE FROM guestbook WHERE id = :id";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([':id' => $id]);
    }
    header("Location: index.php");
    exit();
?>

访问 http://localhost/guestbook/index.php 即可体验完整的留言本系统!

7. 进阶:Laravel框架入门

Laravel是2026年最流行的PHP框架,学习曲线稍陡但功能强大。

7.1 安装Laravel

composer create-project laravel/laravel myapp
cd myapp
php artisan serve

访问 http://localhost:8000 看到Laravel欢迎页面即成功。

7.2 Laravel核心概念

  • 路由:定义URL与控制器方法的映射
  • 控制器:处理业务逻辑
  • 视图:使用Blade模板引擎
  • 模型:使用Eloquent ORM操作数据库
  • 迁移:版本控制数据库结构

7.3 简单的Laravel路由示例

// routes/web.php
Route::get('/', function () {
    return view('welcome');
});
Route::get('/hello/{name}', function ($name) {
    return "你好,$name!";
});
Route::get('/about', function () {
    return "关于页面";
});

8. PHP最佳实践与安全

8.1 安全要点

  • SQL注入防护:使用PDO预处理语句,永远不要直接拼接SQL
  • XSS防护:输出时使用 htmlspecialchars() 转义
  • 密码存储:使用 password_hash()password_verify()
  • 文件上传:限制文件类型、大小,重命名文件
  • CSRF防护:表单中添加Token验证

8.2 密码哈希示例

<?php
    $password = "user123";
    $hashed = password_hash($password, PASSWORD_DEFAULT);
    echo "哈希值:" . $hashed;
    if(password_verify("user123", $hashed)) {
        echo "密码正确";
    }
?>

8.3 错误处理

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 0);  // 生产环境关闭显示
    ini_set('log_errors', 1);      // 记录到日志
    ini_set('error_log', '/path/to/error.log');
?>

9. 学习路径与资源推荐

进阶学习路径
PHP进阶:面向对象编程、命名空间、Traits、依赖注入
框架学习:Laravel、ThinkPHP、Symfony择一深入
生态工具:Composer包管理、PHPUnit测试、Docker部署
全栈扩展:Redis缓存、队列系统、API开发

推荐资源
- PHP官方文档:php.net
- Laravel教程:learnku.com
- 菜鸟教程PHP:runoob.com/php
- B站搜索:"PHP入门教程2026"、"Laravel实战"

最后的建议:PHP的学习曲线非常平缓,留言本系统跑通后,可以尝试增加用户登录、评论回复、分页功能。PHP 8.x版本性能优异,结合现代开发工具和最佳实践,依然是Web开发的首选之一。祝你学习顺利!


版权声明:本文为原创教程,欢迎分享转发。