当前位置:首页>php>Longphp 一款轻量级、零依赖的 PHP MVC 开发框架

Longphp 一款轻量级、零依赖的 PHP MVC 开发框架

  • 2026-10-11 07:57:59
Longphp 一款轻量级、零依赖的 PHP MVC 开发框架

大家好,我是小皮。

🚀 一款轻量级、零依赖的 PHP MVC 开发框架,支持 CLI 和 WEB 双模式运行

项目地址:https://gitee.com/longphp/longphp


📑 目录

  • ✨ 主要特性
  • 📁 项目结构
  • 🏗️ 架构说明
  • ⚙️ 环境要求
  • 🚀 快速开始
  • 📖 使用说明
  • 💻 代码示例
  • 🔧 内置工具
  • ⚠️ 注意事项
  • 📄 许可证

✨ 主要特性

特性
说明
🎯
零依赖
 - 不依赖 Composer,纯原生 PHP 实现,开箱即用
🏗️
MVC 架构
 - 清晰的 Controller → Service → Model 三层分离
🔄
双模式支持
 - CLI 命令行 + WEB HTTP 统一控制器编写方式
💉
依赖注入
 - 基于反射的自动 DI 容器,构造器自动注入
📂
自动加载
 - 命名空间直接映射文件路径,无需手动 require
📝
日志系统
 - 按日期分文件,支持 info/error/warn 三级日志
🌐
cURL 封装
 - 内置单个/并发 HTTP 请求工具
⏳
进度条
 - CLI 模式下的可视化进度展示工具

📁 项目结构

longphp/├── 📄 public/│   └── index.php              # 🌐 WEB 模式入口├── 📄 cli.php                 # 💻 CLI 模式入口├── 📁 config/│   ├── init.php               # ⚙️ 初始化配置│   └── constant.php           # 📌 常量定义├── 📁 controller/│   ├── baseController.php     # 🎛️ 控制器基类│   ├── cli/                   # 💻 CLI 控制器目录│   └── web/                   # 🌐 WEB 控制器目录├── 📁 service/│   ├── baseService.php        # ⚙️ 服务基类│   └── *.php                  # 📦 业务服务类├── 📁 model/│   └── *.php                  # 🗄️ 数据模型类├── 📁 class/│   ├── db/│   │   └── MySQL.php          # 🗄️ 数据库操作类│   ├── log/│   │   └── Log.php            # 📝 日志类│   └── ProgressBar.php        # ⏳ 进度条工具├── 📁 function/│   ├── init.php               # 🚀 初始化函数│   └── help.php               # 🔧 辅助函数├── 📄 .env.online             # 🌍 线上环境配置├── 📄 .env.test               # 🧪 测试环境配置└── 📄 LICENSE                 # 📜 木兰宽松许可证 v2

📂 目录说明

目录
说明
public/
WEB 模式入口目录,配置 Web 服务器指向此目录
controller/
控制器层,包含 cli/ 和 web/ 两个子目录
service/
服务层,处理业务逻辑
model/
模型层,负责数据库操作
class/
核心类库,包含数据库、日志等基础组件
function/
全局函数,包含初始化和辅助工具
config/
配置目录,包含框架初始化配置

🏗️ 架构说明

🔄 MVC 分层架构

┌─────────────────────────────────────────────────────────────┐│                      🌐 请求入口                            │├─────────────────────┬───────────────────────────────────────┤│   📄 public/        │        💻 cli.php                     ││   index.php         │                                       │└─────────┬───────────┴───────────────────┬───────────────────┘          │                               │          ▼                               ▼┌─────────────────────────────────────────────────────────────┐│                  🎛️ Controller 控制器层                      ││   • 接收用户请求                                              ││   • 调用 Service 处理业务                                     ││   • 返回响应结果                                              │└─────────────────────────────┬───────────────────────────────┘                              │                              ▼┌─────────────────────────────────────────────────────────────┐│                  ⚙️ Service 服务层                           ││   • 处理业务逻辑                                              ││   • 数据转换和验证                                            ││   • 调用 Model 获取数据                                      │└─────────────────────────────┬───────────────────────────────┘                              │                              ▼┌─────────────────────────────────────────────────────────────┐│                  🗄️ Model 模型层                             ││   • 数据库 CRUD 操作                                         ││   • 数据表映射                                               ││   • SQL 查询构建                                             │└─────────────────────────────┬───────────────────────────────┘                              │                              ▼┌─────────────────────────────────────────────────────────────┐│                  🗄️ MySQL 数据库                             │└─────────────────────────────────────────────────────────────┘

🔀 请求处理流程

WEB 模式

用户请求 → public/index.php → 解析 PATH_INFO → 路由到控制器 → 依赖注入 → 执行 run() → 返回响应

CLI 模式

命令行参数 → cli.php → 解析参数 → 路由到控制器 → 依赖注入 → 执行 run() → 输出结果

⚙️ 环境要求

📋 基础要求

推荐配置
最低配置
PHP
8.1
8.0
MySQL
5.7+
5.6+

📦 PHP 扩展

扩展名
用途
是否必须
mysqli
MySQL 数据库连接
✅ 是
curl
HTTP 请求
✅ 是
mbstring
多字节字符串处理
✅ 是
json
JSON 数据处理
✅ 是

🚀 快速开始

📥 1. 获取代码

# 克隆项目git clone https://github.com/longphp/longphp.git# 进入项目目录cd longphp

⚙️ 2. 环境配置

# 复制环境配置文件cp .env.online .env# 编辑配置文件(根据实际情况修改)vim .env

📝 .env 配置说明:

[default]db_default=mysqlweb_default_controller=index[log]path_dir=log[mysql]host=127.0.0.1port=3306database=your_databaseuser=your_usernamepass="your_password"

🌐 3. 配置 Web 服务器

Nginx 配置示例

server {    listen 80;    server_name localhost;    root /path/to/longphp/public;    index index.php;    location / {        try_files $uri $uri/ /index.php?$query_string;    }    location ~ \.php$ {        fastcgi_pass 127.0.0.1:9000;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi_params;    }}

Apache 配置示例

<VirtualHost *:80>    DocumentRoot /path/to/longphp/public    ServerName localhost    <Directory /path/to/longphp/public>        AllowOverride All        Require all granted    </Directory></VirtualHost>

✅ 4. 验证安装

# WEB 模式测试curl http://localhost/# CLI 模式测试php -f cli.php

📖 使用说明

💻 CLI 模式

基本用法

php -f cli.php [参数名]

查看可用命令

php -f cli.php

输出示例:

请正确输入参数(举例:php -f cli.php getSoftware):getSoftware 获取软件列表getDataSources 获取数据源...

执行命令

# 获取软件列表php -f cli.php getSoftware# 获取数据源php -f cli.php getDataSources

🌐 WEB 模式

路由规则

WEB 模式根据 PATH_INFO 自动映射到对应的控制器文件:

URL
控制器文件
http://localhost/controller/web/index.php
http://localhost/aaa/bbb/indexcontroller/web/aaa/bbb/index.php
http://localhost/aaa/bbb/index_asdcontroller/web/aaa/bbb/indexAsd.php

🐫 驼峰命名转换

URL 中的下划线会自动转换为驼峰命名:

  • index_asd → indexAsd
  • get_user_list → getUserList

💻 代码示例

🎛️ 控制器示例

CLI 控制器

<?phpnamespacecontroller\cli;usecontroller\baseController;usemodel\attackDsModel;useservice\datasourceService;classgetDataSourcesextendsbaseController{private attackDsModel $attackDsModel;private datasourceService $datasourceService;publicfunction__construct(attackDsModel $attackDsModel, datasourceService $datasourceService){$this->attackDsModel = $attackDsModel;$this->datasourceService = $datasourceService;parent::__construct();    }publicfunctionrun(){// 🚀 获取数据源        $data = $this->datasourceService->fetchDataSources();// 💾 保存到数据库$this->attackDsModel->syncData($data);echo"✅ 同步完成!" . PHP_EOL;    }}

WEB 控制器

<?phpnamespacecontroller\web;usecontroller\baseController;classindexextendsbaseController{publicfunction__construct(){parent::__construct();    }publicfunctionrun(){// 🌐 返回 JSON 数据        header('Content-Type: application/json');echo json_encode(['code' => 200,'message' => 'success','data' => ['version' => '1.1.0']        ]);    }}

🗄️ Model 示例

<?phpnamespacemodel;classattackDsModelextendsbaseModel{/**     * 📊 获取表数据     */publicfunctiongetData(): mixed{returnself::queryRaw('SELECT * FROM `' . self::getTableName() . '`')->fetchAll();    }/**     * 🔄 同步数据     */publicfunctionsyncData(array $data): void{foreach ($data as $item) {            $sql = "INSERT INTO `" . self::getTableName() . "` (ds_id, name, description)                     VALUES ('{$item['ds_id']}', '{$item['name']}', '{$item['description']}')";self::queryRaw($sql);        }    }}

📝 日志使用

<?phpuseclass\log\Log;// 📝 记录信息日志Log::info('用户登录', ['user_id' => 123, 'ip' => '192.168.1.1']);// ⚠️ 记录警告日志Log::warn('配置文件缺失', ['file' => '.env']);// ❌ 记录错误日志Log::error('数据库连接失败', ['host' => 'localhost', 'port' => 3306]);

日志输出格式:

[2024-01-15 10:30:45] INFO "用户登录" {"user_id":123,"ip":"192.168.1.1"}

🔧 内置工具

🌐 cURL 封装

单个请求

<?php// 📡 GET 请求$response = curlCon('https://api.example.com/data');// 📡 POST 请求$response = curlCon('https://api.example.com/data', ['key' => 'value']);// 📡 带 Header 请求$response = curlCon('https://api.example.com/data', [], ['Authorization: Bearer token']);

并发请求

<?php// 🔄 批量请求$urls = ['https://api.example.com/users','https://api.example.com/posts','https://api.example.com/comments'];$results = curlMulti($urls);

🐫 命名转换

<?php// 下划线转驼峰$camelCase = toCamelCase('get_user_list');  // getUserList// 驼峰转下划线$underscore = toUnderScore('getUserList');  // get_user_list

⏳ 进度条

<?phpuseclass\ProgressBar;$total = 100;$progress = new ProgressBar($total);for ($i = 0; $i < $total; $i++) {// 处理任务...    $progress->update($i + 1);}

⚠️ 注意事项

📌 命名规范

  1. 控制器文件名和类名 必须使用驼峰命名

    • ✅ getDataSources.php → class getDataSources
    • ❌ get_data_sources.php → class get_data_sources
  2. 控制器命名空间 要根据路径正确填写

    // controller/cli/getDataSources.phpnamespacecontroller\cli;// controller/web/aaa/bbb/index.phpnamespacecontroller\web\aaa\bbb;
  3. Model 文件名 与数据表名对应

    • 表名 attck_group → Model 文件 attckGroup.php

🔧 配置说明

  1. CLI 参数白名单 需在 config/init.php 中配置

    $configs['allow_argvs'] = ['getSoftware' => '获取软件列表','getDataSources' => '获取数据源',];
  2. 环境配置文件.env 不会被提交到 Git,请手动创建

🐛 常见问题

问题
解决方案
PHP 版本过低
升级到 PHP 8.0 或更高版本
控制器文件不存在
检查文件路径和命名空间是否正确
数据库连接失败
检查 .env 中的数据库配置
日志无法写入
确保 log/ 目录存在且有写入权限

感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。


欢迎关注、分享、点赞、收藏、在看,我是微信公众号「PHP驿站」作者小皮。

最新文章

随机文章