定制 xiaououo/xiaophp 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

xiaououo/xiaophp

Composer 安装命令:

composer create-project xiaououo/xiaophp

包简介

基于 PHP 的轻量级 MVC 框架,适合小型项目快速开发

README 文档

README

一、框架简介

XiaoPHP(小新PHP)是一款由国人开发的轻量级 PHP MVC 框架,专为小型项目、API 接口、管理后台的快速开发设计。框架采用原生 PHP 编写,零第三方依赖,部署简单,上手容易。

**当前版本:**V1.6.0

**开源协议:**Apache-2.0

**作者:**小新

**核心特点:**零依赖、轻量级、MVC 架构、开箱即用

二、环境要求

组件 要求
PHP 版本 >= 7.4
必选扩展 openssl、curl、pdo_mysql、json
可选扩展 redis(用于 Redis 缓存功能)
Composer 可选,推荐使用

三、安装部署

3.1 Composer 安装(推荐)

composer create-project xiaououo/xiaophp 项目名

3.2 手动安装

下载压缩包解压到网站目录即可,无需额外安装步骤。

3.3 部署配置

网站根目录必须指向 Public/ 目录,这是 MVC 框架的统一规范,保护其他目录不被直接访问。

Apache 部署

确保开启 mod_rewrite 模块,Public 目录下已自带 .htaccess 文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

Nginx 部署

参考 Public/nginx.htaccess 文件配置伪静态:

location / {
    try_files $uri $uri/ /index.php?$args;
}

开发调试(PHP 内置服务器)

cd Public
php -S localhost:8000 router.php

四、目录结构

XiaoPHP/
├── App/
│   ├── Func/          # 自定义函数目录(自动加载)
│   └── Run/           # 控制器目录
├── Config/            # 配置文件目录
│   ├── App.php        # 应用配置
│   ├── Cache.php      # 缓存配置
│   ├── Logs.php       # 日志配置
│   ├── Middleware.php # 中间件配置
│   ├── Mysql.php      # 数据库配置
│   ├── Redis.php      # Redis配置
│   └── AliyunDns.php  # 阿里云DNS配置
├── Public/            # 网站入口目录
│   ├── index.php      # 入口文件
│   ├── router.php     # 内置服务器路由
│   └── .htaccess      # Apache伪静态
├── Route/             # 自定义路由
│   └── Route.php
├── Temp/              # 临时文件目录
│   └── Cache/         # 文件缓存目录
├── logs/              # 日志目录
│   ├── success/       # 成功请求日志
│   └── error/         # 失败请求日志
├── view/              # 视图模板目录
├── Whitelist/         # 路由白名单
│   └── Whitelist.php
├── XiaoPHP/           # 框架核心目录
│   ├── Tools/
│   │   ├── System/    # 系统工具类
│   │   └── Code/      # 业务工具类
│   ├── Error/         # 错误页面
│   ├── console.php    # 框架引导文件
│   ├── debug.php      # 调试信息展示
│   ├── Middleware.php # 中间件核心
│   ├── Routing.php    # 路由分发
│   └── xiao.php       # 控制台彩蛋
├── vendor/            # Composer自动加载
├── .env               # 环境变量配置
├── composer.json
└── composer.lock

五、配置说明

5.1 环境变量 .env

框架采用环境变量优先策略,.env 文件配置会覆盖配置文件默认值。

# MySQL配置
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=xiaophp
DB_USER=root
DB_PASSWORD=123456

# Redis配置
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=

# 框架配置
DEBUG=true
ERROR_FORMAT=html

5.2 应用配置 Config/App.php

return [
    "debug" => 'true',   // 调试模式:true | false
    "error" => 'html',   // 错误格式:html | json
];

5.3 数据库配置 Config/Mysql.php

return [
    "host"     => '127.0.0.1',
    "port"     => '3306',
    "dbname"   => 'xiaophp',
    "user"     => 'root',
    "password" => '',
];

5.4 中间件配置 Config/Middleware.php

return [
    "storage"       => 'cache',              // 存储方式:cache | redis
    "token_key"     => 'token',              // Token参数名
    "auth_mode"     => 'bearer,get,post,cookie', // 认证方式
    "cookie_name"   => 'auth_token',         // Cookie名称
    "cookie_expire" => '7200',               // 默认过期时间(秒)
];

5.5 缓存配置 Config/Cache.php

return [
    "dir"    => '',     // 缓存目录,默认Temp/Cache
    "expire" => 3600,   // 默认过期时间(秒)
];

5.6 日志配置 Config/Logs.php

return [
    "success" => true,  // 记录成功请求
    "error"   => true,  // 记录失败请求
];

六、路由系统

6.1 自动路由(默认)

URL 格式:域名/控制器名/方法名

URL 控制器文件 执行方法
/ App/Run/Index.php Main()
/index App/Run/Index.php Main()
/user App/Run/User.php Main()
/user/login App/Run/User.php login()

1.6 新特性:路由、控制器文件名、方法名均不区分大小写。URL 中的 Query 参数(?id=1)不会影响路由匹配。

6.2 自定义路由

在 Route/Route.php 中配置:

use XiaoPHP\systools\Config\Route;

// 格式:Route::add(请求方法, 路由路径, 控制器/方法, 控制器目录)
Route::add("GET", "/", "Index/Main", "App/Run");
Route::add("POST", "/api/user", "User/add", "App/Run");

自定义路由优先级高于自动路由。请求方法不匹配时返回 405 错误。

七、控制器

7.1 创建控制器

在 App/Run/ 目录下创建 PHP 文件,文件名与类名一致:

<?php
// App/Run/User.php
use XiaoPHP\systools\toolsbox\View;
use app\tools\MysqlTools;

class User
{
    // 默认方法:Main(),访问 /user
    public function Main()
    {
        $view = new View();
        $view->set(["title" => "用户列表"], "user")->show("index");
    }

    // 访问 /user/login
    public function login()
    {
        return "登录页面";
    }

    // 访问 /user/list,返回JSON
    public function list()
    {
        $db = new MysqlTools();
        $users = $db->table("users")->limit(10)->get();
        return json_encode($users);
    }
}

7.2 控制器规范

  • 默认方法名为 Main()

  • 方法名不区分大小写(1.6 特性)

  • 控制器方法可以直接 return 输出内容

  • 控制器类不需要继承任何基类

八、视图引擎

8.1 模板语法

模板文件放在 view/ 目录下,使用 .html 扩展名。

语法 说明 示例
{{$变量名}} 输出普通变量 {{$title}}
{{$变量.子属性}} 输出数组属性 {{$user.name}}

8.2 基本用法

use XiaoPHP\systools\toolsbox\View;

$view = new View();

// 链式调用
$view->set(["title" => "首页", "content" => "欢迎"], "index")->show("index");

// 分步调用(数据自动合并)
$view->set(["title" => "首页"]);
$view->set(["content" => "欢迎"]);
$view->show("index");

8.3 子目录模板

// 渲染 view/user/login.html
$view->set(["title" => "登录"], "user")->show("login");

**安全机制:**视图引擎自动过滤路径穿越(..),并通过 realpath() 确保模板文件在 view/ 目录内,防止任意文件读取漏洞。

九、数据库操作

9.1 基本查询

use app\tools\MysqlTools;

$db = new MysqlTools();

// 查询所有
$users = $db->table("users")->get();

// 查询单条
$user = $db->table("users")->where("id", "1")->first();

// 链式条件查询
$list = $db->table("users")
    ->where("status", "1")
    ->where("age", ">= 18")
    ->order("id desc")
    ->limit(10)
    ->offset(0)
    ->get();

9.2 where 条件

// 等于(默认)
$db->table("users")->where("id", "1");

// 比较运算符
$db->table("users")->where("age", ">= 18");
$db->table("users")->where("status", "!= 0");

// IN 查询
$db->table("users")->where("id", [1, 2, 3, 5]);

9.3 模糊查询

// 两端模糊:%keyword%
$db->table("users")->whereLike("name", "张三");

// 左模糊:%keyword
$db->table("users")->whereLike("name", "张三", "left");

// 右模糊:keyword%
$db->table("users")->whereLike("name", "张三", "right");

// 多列模糊搜索(OR关系)
$db->table("users")->whereMultiLike(["name", "email", "phone"], "关键词");

// 全表所有列模糊搜索
$db->table("users")->whereFullLike("关键词");

9.4 写入操作

// 插入数据,返回自增ID
$id = $db->table("users")->insert([
    "name"   => "张三",
    "email"  => "zhangsan@example.com",
    "status" => 1,
]);

// 更新数据(必须带WHERE条件,防止全表更新)
$affected = $db->table("users")
    ->where("id", "1")
    ->update([
        "name"   => "李四",
        "status" => 0,
    ]);

// 删除数据(必须带WHERE条件,防止全表删除)
$db->table("users")->where("id", "1")->delete();

9.5 辅助方法

// 获取ID范围
$range = $db->table("users")->getMinMaxId();
// 返回:["min_id" => 1, "max_id" => 1000]

**安全提醒:**update 和 delete 操作必须带 where 条件,否则框架会抛出错误,防止误操作全表。所有查询使用 PDO 预处理,防 SQL 注入。

十、Redis 缓存

10.1 基本使用

use app\tools\RedisTools;

$redis = new RedisTools();

// 字符串操作
$redis->set("key", "value", 3600);  // 设置,带过期时间(秒)
$value = $redis->get("key");        // 获取
$redis->del("key");                 // 删除
$exists = $redis->exists("key");    // 判断是否存在

// 检查Redis是否可用
$available = $redis->isAvailable();

**自动容错:**Redis 连接失败时不会抛出致命错误,中间件等功能会自动降级到文件缓存。

十一、文件缓存

无需 Redis 也能使用的轻量缓存,基于文件存储。

use XiaoPHP\systools\System\Cache;

$cache = new Cache();

// 设置缓存
$cache->set("key", ["data" => "value"], 3600);

// 获取缓存
$data = $cache->get("key");

// 删除缓存
$cache->delete("key");

// 清空所有缓存
$cache->clear();

缓存文件存储在 Temp/Cache/ 目录,key 自动用 md5 命名,自动过期清理。

十二、中间件与 Token 认证

框架内置 Token 认证中间件,支持多种认证方式和存储后端。

12.1 启用中间件

在控制器方法中调用:

use XiaoPHP\systools\Middleware;

class User
{
    public function info()
    {
        // 执行Token校验,失败自动返回401
        $middleware = new Middleware();
        $middleware->check();

        // 校验通过,继续业务逻辑
        return "用户信息";
    }
}

12.2 签发 Token

$middleware = new Middleware();

// 签发Token,自动根据配置存储(Redis或文件缓存)
// Cookie模式会自动设置HttpOnly Cookie
$token = md5(uniqid());
$middleware->setToken($token, ["uid" => 1, "username" => "admin"], 7200);

12.3 销毁 Token

$middleware = new Middleware();
$middleware->delToken($token);

12.4 支持的认证方式

  • bearer:HTTP 请求头 Authorization: Bearer xxx

  • get:URL 参数 ?token=xxx

  • post:POST 参数 token=xxx

  • cookie:Cookie 自动读取

可同时配置多种方式,按顺序依次尝试获取。

十三、白名单机制

在 Whitelist/Whitelist.php 中配置不需要认证的路由:

use XiaoPHP\systools\Config\Whitelist;

Whitelist::add("/Index/Main");
Whitelist::add("/api/health");
Whitelist::add("/api/public/*");  // 支持通配符

中间件 check() 时,白名单内的路径直接放行,不校验 Token。

十四、加密工具

14.1 AES 加密

use XiaoPHP\systools\System\AesTools;

// 加密
$encrypted = AesTools::encrypt("明文", "密钥");

// 解密
$decrypted = AesTools::decrypt($encrypted, "密钥");

14.2 RSA 加密

use XiaoPHP\systools\System\RSATools;

// 公钥加密
$encrypted = RSATools::publicEncrypt("明文", $publicKey);

// 私钥解密
$decrypted = RSATools::privateDecrypt($encrypted, $privateKey);

十五、HTTP 请求工具(Wget)

基于 cURL 封装的 HTTP 请求类,支持 5 种请求方式。

use XiaoPHP\systools\toolsbox\Wget;

// GET 请求
$response = Wget::get("https://api.example.com/data");

// POST 表单提交
$response = Wget::post("https://api.example.com/submit", [
    "name"  => "张三",
    "email" => "test@example.com",
]);

// POST JSON(传字符串自动设Content-Type)
$response = Wget::post("https://api.example.com/api", json_encode($data));

// PUT 请求
$response = Wget::put("https://api.example.com/update/1", $data);

// DELETE 请求
$response = Wget::delete("https://api.example.com/delete/1");

// 下载文件
$result = Wget::download("https://example.com/file.zip", "/path/to/save.zip");

// 开启SSL验证(默认关闭)
$response = Wget::get("https://api.example.com", true);

// 自定义curl选项
$response = Wget::get($url, false, [
    CURLOPT_TIMEOUT => 60,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer xxx"],
]);

十六、Json 工具

use XiaoPHP\systools\toolsbox\Json;

// 输出JSON响应(自动设header并exit)
Json::encode(["code" => 200, "msg" => "success", "data" => []]);

// 解析JSON
$data = Json::decode($jsonString);

// 直接请求远程URL并解析JSON
$data = Json::wdecode("https://api.example.com/data.json");

十七、阿里云 DNS

内置阿里云 DNS API 封装,可直接操作域名解析。

use app\tools\AliyunDns;

$dns = new AliyunDns();

// 获取域名列表
$domains = $dns->getDomainList();

// 获取解析记录
$records = $dns->getRecords("example.com");

// 添加解析记录
$dns->addRecord("example.com", "www", "A", "1.2.3.4");

// 修改解析记录
$dns->updateRecord($recordId, "www", "A", "5.6.7.8");

// 删除解析记录
$dns->deleteRecord($recordId);

// 启用/禁用解析
$dns->setRecordStatus($recordId, "Enable");

使用前需在 Config/AliyunDns.php 配置 AccessKey。

十八、IP 获取工具

use XiaoPHP\systools\System\Ipaddr;

// 获取客户端真实IP
$ip = Ipaddr::get();

自动识别 X-Forwarded-For、HTTP_CLIENT_IP 等代理头,支持 CDN 和反向代理环境。

十九、日志系统

框架自动记录所有请求日志,按天分割文件。

19.1 日志分类

  • **成功日志:**logs/success/YYYY-MM-DD.logs

  • **失败日志:**logs/error/YYYY-MM-DD.logs

19.2 日志格式

success 2026-07-14 12:00:00--[192.168.1.1]:/index-code:200
error 2026-07-14 12:01:00--[192.168.1.1]:/notfound-code:404

19.3 手动记录日志

use XiaoPHP\systools\System\Logs;

$log = new Logs();
$log->logs(0, 200);  // 成功日志
$log->logs(1, 500);  // 错误日志

二十、自定义函数

在 App/Func/ 目录下创建的 .php 文件会被自动加载,适合放全局辅助函数:

<?php
// App/Func/helpers.php

function dd($var) {
    var_dump($var);
    die;
}

function format_date($timestamp) {
    return date("Y-m-d H:i:s", $timestamp);
}

二十一、错误处理与调试

21.1 调试模式

通过 .env 的 DEBUG 参数控制:

  • **开启(true):**展示详细错误信息、调用堆栈、变量信息

  • **关闭(false):**生产环境,只返回简洁错误页

21.2 错误页面

错误码 说明 模板文件
400 请求参数错误 通用错误页
401 未授权 Error/401.html
403 禁止访问 Error/403.html
404 页面不存在 Error/404.html
405 请求方法不允许 通用错误页
500 服务器内部错误 通用错误页

21.3 三层错误捕获

  • 普通错误:set_error_handler 捕获

  • 未捕获异常:set_exception_handler 捕获

  • 致命错误:register_shutdown_function 捕获

21.4 错误输出格式

通过 error 配置控制:

  • **html:**返回美观的错误页面,适合网站项目

  • **json:**返回 JSON 格式错误,适合 API 项目

二十二、V1.6 版本更新日志

主要更新

  • **路由不区分大小写:**URL、控制器文件名、方法名均不区分大小写,兼容性更好

  • **URL 参数自动剥离:**Query String 不会影响路由匹配

  • **白名单支持通配符:**Whitelist::add("/api/*") 支持批量匹配

  • **开源协议变更:**从 MIT 调整为 Apache-2.0

  • **中间件路径统一小写:**白名单匹配更准确

  • **白名单自动加载:**无需手动引入,框架启动时自动加载

  • **中间件自动加载:**框架启动时自动加载 Middleware 类

  • **Temp 目录回归:**文件缓存目录正式纳入发行包

兼容性说明

  • 1.5 升级 1.6 基本无缝,路由大小写不敏感属于增强功能

  • 控制器写法、工具类调用方式与 1.5 完全一致

  • 开源协议变更为 Apache-2.0,商用更友好

二十三、最佳实践

  1. **生产环境务必关闭 DEBUG:**避免泄露敏感信息

  2. **网站根目录指向 Public:**保护配置文件和核心代码不被直接访问

  3. **设置正确的文件权限:**logs/ 和 Temp/ 目录需要写入权限

  4. **API 项目用 json 错误格式:**Config/App.php 中 error 设为 json

  5. **有 Redis 优先用 Redis:**中间件 Token 存储性能更好

  6. **数据库操作必须带 where:**框架已做强制校验,养成好习惯

xiaououo/xiaophp 适用场景与选型建议

xiaououo/xiaophp 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 1, 最近一次更新时间为 2026 年 07 月 15 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 xiaououo/xiaophp 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 xiaououo/xiaophp 我们能提供哪些服务?
定制开发 / 二次开发

基于 xiaououo/xiaophp 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2026-07-15