原生PHP平台需明确业务类型与最小功能边界,搭建含public/app/config目录结构,实现用户认证闭环、PDO数据库封装及安全规范。

明确平台类型和最小功能边界
原生 PHP 搭建平台,不是写一个“能跑的页面”,而是围绕业务目标定义清楚“它到底要做什么”。比如是内容管理后台、用户注册登录系统、还是带房间的直播控制台?先画出三类核心功能:用户能干什么(如发布/查看/删除)、数据存在哪(用户表、内容表、日志表)、哪些操作必须受控(如只有管理员能删文章)。不追求大而全,但每项功能都要可验证——例如“用户登录”必须包含表单提交、密码加密、session 记录、跳转判断四个环节,缺一不可。
搭好环境与项目骨架
用 XAMPP 启动 Apache 和 MySQL,把项目放 htdocs/myplatform 下。创建基础目录结构:
- public/:只放入口文件 index.php 和静态资源(css/js/images),浏览器只能访问这里
- app/:放控制器(UserController.php)、模型(UserModel.php)、视图(login.php)
- config/:数据库配置单独写在 database.php,不暴露在 public 下
- vendor/:暂时为空,后续如需自动加载可补 PSR-4 简易 loader
入口 public/index.php 只做一件事:引入配置、初始化路由、分发请求。不要在里面写 SQL 或 HTML。
实现用户认证闭环
这是平台最基础的安全支点,必须手写、不绕过:
立即学习“PHP免费学习笔记(深入)”;
- 建 MySQL 表:users(id, username, password_hash, role, created_at),密码字段用 VARCHAR(255)
- 注册页(app/views/register.php)提交到 public/index.php?r=auth/register
- 在控制器里接收 POST,用 password_hash($_POST['pwd'], PASSWORD_ARGON2ID) 加密,再插入数据库
- 登录成功后执行:session_start(); $_SESSION['uid'] = $user['id']; $_SESSION['role'] = $user['role'];
- 所有需登录的页面开头加校验:if (!isset($_SESSION['uid'])) { header('Location: /login'); exit; }
连通数据库并封装基本操作
别在每个文件里重复写 new mysqli。在 config/database.php 中统一处理:
<?php
$host = 'localhost';
$dbname = 'myplatform';
$user = 'root';
$pass = '';
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
?>
在模型文件中复用 $pdo,例如 UserModel::login() 方法里只写查询逻辑,不碰 $_POST 或 header。这样改数据库地址或换为 MySQLi 时,只动一个文件。
安全与可维护性要点
原生不等于随意,几个硬性习惯要立刻养成:
- 所有用户输入进 SQL 前,必须用 PDO::prepare() + execute(),禁用字符串拼接
- 敏感操作(删账号、改权限)加二次确认,后端再验证 session 角色,不能只靠前端按钮显隐
- 错误不直接输出 MySQL 报错,用 try-catch 包裹,记录到 logs/error.log,页面只提示“操作失败”
- URL 路径用 ?r=user/list 这类简单参数即可,先不做重写;.htaccess 留着,等功能稳了再配 RewriteRule



















