PHP原生留言本:从零部署到安全加固的完整实践
简介这是一份面向计算机专业本科生的PHP毕业设计实战资源聚焦文本留言本系统开发适用于课程设计、期末大作业及毕设选题尤其适合PHP初学者快速上手Web后端开发与MySQL数据库应用。压缩包共115个文件含10个核心PHP业务逻辑文件、19个HTML前端页面、83个GIF格式界面素材用于表单交互与状态提示、1个CSS样式文件及配套JS脚本整体仅150KB轻量易部署。已有160人学习下载资源经实测可稳定运行提供完整项目源码、建库SQL脚本及基础环境配置说明所有代码均带中文注释目录结构清晰含admin管理模块、guestbook留言核心模块及image资源目录兼顾功能完整性与教学友好性是入门级PHPMySQL全栈开发的典型范例。1. 一个跑在 PHPMySQL 上的轻量级留言本为什么至今仍是毕业设计高频选题你可能觉得留言本太老套——但现实是每年仍有大量计算机相关专业学生用它完成毕设答辩。不是因为技术多先进而是它恰好卡在「教学闭环」的黄金点上前端表单提交、后端逻辑处理、数据库增删改查、XSS 过滤与 SQL 注入防护、分页展示、管理员审核流程全链路功能完整代码量可控通常 200–500 行核心 PHP部署门槛极低仅需 Apache/Nginx PHP 7.2 MySQL 5.7。这套guestbook.rar源码包正是经过真实环境验证的典型实现不依赖框架、纯原生 PHP 编写所有 HTML/CSS/JS 内聚在单目录下css.css控制样式13 张 GIF 图标01.gif–13.gif用于按钮、状态提示和装饰元素结构清晰到能一眼看出 MVC 的雏形。它适合两类人一是刚学完 PHP 基础语法、需要一个“能跑通”的完整项目练手二是课程设计时间紧张、需快速交付可演示系统的同学。注意这不是 Laravel 或 ThinkPHP 项目没有 Composer 自动加载没有路由配置——它的价值恰恰在于“裸写”让你看清$_POST如何进数据库、mysql_query()怎么被废弃、mysqli_real_escape_string()为何必须加、以及为什么05.gif要放在根目录而非/images/下。2. 从解压到运行本地环境搭建与数据库初始化实操2.1 环境版本选择与 PHP 配置关键项该留言本源码基于 PHP 原生函数编写兼容性集中在 PHP 7.2–8.1 区间。强烈建议使用 PHP 7.4原因有三一是mysql_*函数在 PHP 7.0 已彻底移除而本项目实际使用的是mysqli_*查看conn.php或config.php可确认PHP 7.4 对mysqli的错误提示更友好二是 PHP 8.0 默认启用严格类型检查部分未声明返回类型的函数如自定义分页函数会触发Fatal error三是宝塔面板、XAMPP、WampServer 等主流集成环境对 PHP 7.4 的扩展支持最稳定。安装后需检查php.ini中以下三项; 必须开启否则 mysqli_connect() 会失败 extensionmysqli ; 留言内容含中文时此项决定字符集是否乱码 default_charset UTF-8 ; 开发阶段务必打开便于定位 SQL 错误 display_errors On error_reporting E_ALL提示若启动后页面空白第一反应不是代码错而是mysqli扩展未启用。Windows 下检查php.ini中;extensionphp_mysqli.dll是否已取消注释Linux 下执行php -m | grep mysqli确认模块加载。2.2 数据库创建与脚本导入全流程项目未提供.sql文件但根据目录结构和常见实践数据库初始化需手动建库建表。登录 MySQL推荐使用 Navicat 或 phpMyAdmin避免命令行输错-- 1. 创建数据库显式指定字符集避免中文乱码 CREATE DATABASE guestbook CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 2. 切换到该库 USE guestbook; -- 3. 创建留言表字段名与源码中 INSERT 语句严格对应 CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100), content TEXT NOT NULL, ip VARCHAR(45), -- 支持 IPv6 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, status TINYINT DEFAULT 1 -- 1:待审核, 0:已屏蔽 ); -- 4. 插入一条测试数据验证后续读取逻辑 INSERT INTO messages (name, email, content, ip) VALUES (测试用户, testexample.com, 这是第一条测试留言, 127.0.0.1);注意utf8mb4是 MySQL 5.7 推荐字符集支持 Emoji 和四字节 UTF-8 字符VARCHAR(45)是 IPv6 地址最大长度如2001:0db8:85a3:0000:0000:8a2e:0370:7334共 39 位冒号留余量status字段为后台审核功能预留源码中admin.php会用到。2.3 源码目录结构解析与关键文件作用解压PHP文本留言本_guestbook.rar后得到平铺文件列表。这不是随意堆放而是经典 LAMP 应用的扁平化组织文件名类型核心作用关联技术点index.php主入口显示留言列表提交表单mysqli_query()while($row mysqli_fetch_assoc())循环渲染post.php表单处理器接收 POST、过滤输入、插入数据库htmlspecialchars()防 XSS、mysqli_real_escape_string()防注入admin.php后台入口查看所有留言、修改status字段UPDATE messages SET status0 WHERE id?conn.php数据库连接封装mysqli_connect()返回连接资源mysqli_select_db()选择数据库css.css样式表定义.guestbook,.form-group等类background-image: url(05.gif)调用图标01.gif–13.gif静态资源按钮图标如affiche.gif为“公告”图标、分割线、状态指示img src08.gif alt提交直接嵌入 HTML特别注意post.php中的过滤逻辑它不会用filter_var($email, FILTER_VALIDATE_EMAIL)验证邮箱而是简单正则/^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$/—— 这是教学项目典型做法够用、易懂、不引入复杂依赖。但生产环境必须升级为filter_var()FILTER_SANITIZE_EMAIL组合。3. 安全加固与功能补全从“能跑”到“可用”的四步改造3.1 防止 SQL 注入从mysql_real_escape_string()到预处理语句原始代码大概率使用mysqli_real_escape_string($conn, $_POST[content])拼接 SQL。这虽比直接拼接安全但仍有绕过风险如宽字节注入。必须升级为预处理语句Prepared Statements这是 PHP 7.0 官方强推方案// 替换 post.php 中原有插入逻辑约第 20–30 行 $stmt $conn-prepare(INSERT INTO messages (name, email, content, ip) VALUES (?, ?, ?, ?)); $stmt-bind_param(ssss, $name, $email, $content, $ip); $name htmlspecialchars(trim($_POST[name]), ENT_QUOTES, UTF-8); $email filter_var(trim($_POST[email]), FILTER_SANITIZE_EMAIL); $content htmlspecialchars(trim($_POST[content]), ENT_QUOTES, UTF-8); $ip $_SERVER[REMOTE_ADDR]; $stmt-execute();逻辑说明bind_param(ssss, ...)中ssss表示四个字符串参数$name等变量在execute()前赋值SQL 语句与数据完全分离。htmlspecialchars()第二个参数ENT_QUOTES确保单双引号都被转义防止 JS 注入filter_var()对邮箱做净化而非仅验证更安全。3.2 防止 XSS 攻击输出时的双重过滤策略留言内容在index.php中直接echo $row[content]渲染这是 XSS 高危点。不能只靠输入过滤输出时必须再次转义!-- 在 index.php 的循环体中替换原有 echo -- td?php echo htmlspecialchars($row[content], ENT_QUOTES, UTF-8); ?/td !-- 若需支持简单 HTML如 br改用 htmlpurifier 库或白名单过滤 -- !-- 但毕业设计场景纯文本更稳妥 --同时admin.php中显示留言内容也需同样处理否则后台管理员查看时会被攻击。3.3 添加验证码机制用 GD 库生成基础图形验证码项目无验证码易被机器刷屏。添加captcha.php需 GD 库支持?php session_start(); $code substr(str_shuffle(0123456789abcdefghijklmnopqrstuvwxyz), 0, 4); $_SESSION[captcha] $code; // 创建图像 $im imagecreatetruecolor(80, 30); $bg imagecolorallocate($im, 255, 255, 255); imagefill($im, 0, 0, $bg); // 添加干扰点 for ($i 0; $i 50; $i) { $px rand(0, 80); $py rand(0, 30); imagesetpixel($im, $px, $py, imagecolorallocate($im, rand(100, 200), rand(100, 200), rand(100, 200))); } // 写入验证码 $font arial.ttf; // 确保服务器有此字体文件 imagettftext($im, 14, rand(-10, 10), 15, 22, imagecolorallocate($im, 0, 0, 0), $font, $code); header(Content-Type: image/png); imagepng($im); imagedestroy($im); ?在index.php表单中加入img srccaptcha.php onclickthis.srccaptcha.php?Math.random() alt验证码 / input typetext namecaptcha placeholder输入验证码 required /post.php验证逻辑追加if ($_POST[captcha] ! $_SESSION[captcha]) { die(验证码错误); }3.4 实现分页功能计算总条数与 LIMIT 偏移量原始代码可能一次性查出所有留言数据量大时页面卡顿。添加分页每页 10 条// 在 index.php 开头添加 $page isset($_GET[page]) ? (int)$_GET[page] : 1; $limit 10; $offset ($page - 1) * $limit; // 修改查询语句 $sql SELECT * FROM messages WHERE status1 ORDER BY created_at DESC LIMIT {$limit} OFFSET {$offset}; $result mysqli_query($conn, $sql); // 获取总记录数用于计算页码 $total_sql SELECT COUNT(*) as total FROM messages WHERE status1; $total_res mysqli_query($conn, $total_sql); $total_row mysqli_fetch_assoc($total_res); $total $total_row[total]; $pages ceil($total / $limit); // 在留言列表下方输出分页链接 for ($i 1; $i $pages; $i) { echo a href?page{$i}{$i}/a ; }参数说明OFFSET是 MySQL 分页核心$offset由当前页码动态计算ceil($total / $limit)向上取整得总页数链接?page2触发新查询。此方案无需 AJAX符合毕业设计“功能完整”要求。4. 部署到宝塔面板Nginx 配置与 PHP-FPM 优化技巧4.1 宝塔面板创建站点与目录权限设置在宝塔面板中新建站点时不要勾选“PHP 版本”自动匹配手动选择 PHP 7.4。网站根目录指向解压后的文件夹如/www/wwwroot/guestbook。上传全部文件后执行关键权限命令# 进入站点目录 cd /www/wwwroot/guestbook # 设置文件权限PHP 文件可读可执行CSS/图片只读 find . -type f -name *.php -exec chmod 644 {} \; find . -type f \( -name *.css -o -name *.gif \) -exec chmod 644 {} \; # 设置目录权限确保 session 可写PHP 默认 session.save_path/tmp chmod 755 . # 重点若出现 Permission denied in /www/wwwroot/guestbook/conn.php on line X # 检查 /tmp 目录权限或在 php.ini 中修改 session.save_path/www/wwwroot/guestbook/sessions mkdir -p sessions chmod 777 sessions提示宝塔面板的“文件管理”界面右键可批量修改权限但命令行更精准。chmod 777 sessions是开发环境临时方案上线前应改为755并用chown www:www sessions指定用户组。4.2 Nginx 配置防跨站与路径重写默认 Nginx 配置允许直接访问.php文件但需阻止访问敏感文件如conn.php。在宝塔站点设置 → “配置文件”中在server块内添加# 禁止访问数据库配置文件 location ~* ^/(conn|config)\.php$ { deny all; } # 禁止访问 .htaccess、.env 等配置文件 location ~ /\. { deny all; } # 确保 PHP 解析正确宝塔通常已配置此处为确认 location ~ \.php$ { try_files $uri 404; fastcgi_pass unix:/tmp/php-cgi-74.sock; # 注意 PHP 版本后缀 fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }4.3 PHP-FPM 进程管理与内存限制调优留言本虽轻量但高并发下仍需合理分配资源。在宝塔 → PHP 7.4 设置 → “配置修改”中调整; 将 pm.max_children 从默认 30 降至 15避免小内存 VPS 崩溃 pm.max_children 15 ; 设置每个子进程处理 500 个请求后重启防止内存泄漏 pm.max_requests 500 ; 单个脚本最大执行时间留言本无需长耗时设为 30 秒足够 max_execution_time 30 ; POST 数据大小限制留言内容一般 1MB保持默认 8M 即可 post_max_size 8M修改后重启 PHP-FPM宝塔界面点击“重启”按钮或执行systemctl restart php-fpm-74。4.4 验证部署成功三步终端检测法不依赖浏览器用 Linux 终端快速验证服务健康度# 1. 检查 Web 服务是否监听 80 端口 netstat -tuln | grep :80 # 2. 检查 PHP 解析是否生效返回 200 且含 PHP Version curl -I http://localhost/index.php 2/dev/null | head -1 # 3. 检查数据库连接替换 your_db_name 和 password mysql -u root -pyour_password -e USE guestbook; SELECT COUNT(*) FROM messages; 2/dev/null若三步均返回预期结果如HTTP/1.1 200 OK、count(*)数值说明环境已就绪可进行最终功能测试。5. 毕业答辩高频问题预判与代码注释增强技巧5.1 针对“为什么不用框架”的答辩话术设计当被问及“为何不使用 Laravel/ThinkPHP”时避免回答“不会用”或“太麻烦”。采用技术决策话术“本项目定位是验证 PHP 原生 Web 开发全流程能力。框架封装了数据库连接、路由分发、模板渲染等细节反而掩盖了底层交互逻辑。比如mysqli_real_escape_string()的作用、$_SESSION的存储机制、HTML 表单与 PHP$_POST的映射关系——这些正是课程设计要考察的核心知识点。用原生实现能清晰展示从用户输入到数据落库的每一层转换便于答辩时逐行讲解。”同时在conn.php头部添加注释强化此观点?php /** * 数据库连接文件原生 mysqli 实现 * 【答辩重点】此处体现1. 连接参数明文化host/user/pass/db * 2. 错误处理采用 mysqli_connect_error() 而非 符号抑制 * 3. 连接资源复用避免多次 new mysqli() */ $host localhost; $user root; $pass your_password; $db guestbook; $conn mysqli_connect($host, $user, $pass, $db); if (!$conn) { die(数据库连接失败 . mysqli_connect_error()); } mysqli_set_charset($conn, utf8mb4); ?5.2 在关键函数旁添加“教学注释块”毕业设计文档常要求“代码注释率 ≥ 30%”。对post.php中的插入逻辑用区块注释替代单行注释// 【教学注释SQL 注入防护原理】 // 1. htmlspecialchars()将 转为 HTML 实体防止 JS 代码执行 // 2. filter_var()对邮箱进行标准化处理移除非法字符 // 3. 预处理语句SQL 模板与数据分离数据库引擎自动识别参数边界 // 4. bind_param()明确指定参数类型sstring杜绝类型混淆漏洞 // $stmt $conn-prepare(INSERT INTO messages (name, email, content, ip) VALUES (?, ?, ?, ?)); $stmt-bind_param(ssss, $name, $email, $content, $ip);5.3 生成答辩演示用的“最小可行数据集”避免答辩时现场录入数据耗时。准备demo_data.sql脚本包含 5 条风格各异的留言INSERT INTO messages (name, email, content, ip, status) VALUES (张三, zhangschool.edu, 老师好这个留言本作业我完成了谢谢指导, 192.168.1.100, 1), (李四, licompany.com, 请问 admin.php 的登录密码是多少, 2001:db8::1, 1), (王五, wutest.org, scriptalert(XSS)/script 这段代码会被过滤吗, 10.0.0.5, 1), (赵六, zhaodemo.cn, 测试长留言AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA......, 172.16.0.20, 1), (答辩助教, assistantexam.edu, 【系统测试】请检查分页功能、验证码刷新、后台审核是否生效。, 127.0.0.1, 1);导入后index.php显示 5 条留言admin.php可见全部且能切换status覆盖所有答辩演示点。注意长留言测试了TEXT字段存储上限MySQL TEXT 最大 65535 字节也验证了htmlspecialchars()对超长字符串的处理性能——这是答辩时可主动提及的“压力测试”细节。本文还有配套的精品资源点击获取