大家好,我是小皮。
🚀 一款轻量级、零依赖的 PHP MVC 开发框架,支持 CLI 和 WEB 双模式运行
项目地址:https://gitee.com/longphp/longphp
📑 目录
✨ 主要特性
| |
|---|
| 零依赖 - 不依赖 Composer,纯原生 PHP 实现,开箱即用 |
| MVC 架构 - 清晰的 Controller → Service → Model 三层分离 |
| 双模式支持 - CLI 命令行 + WEB HTTP 统一控制器编写方式 |
| 依赖注入 |
| 自动加载 - 命名空间直接映射文件路径,无需手动 require |
| 日志系统 - 按日期分文件,支持 info/error/warn 三级日志 |
| cURL 封装 |
| 进度条 |
📁 项目结构
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 扩展
🚀 快速开始
📥 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 自动映射到对应的控制器文件:
| |
|---|
http://localhost/ | controller/web/index.php |
http://localhost/aaa/bbb/index | controller/web/aaa/bbb/index.php |
http://localhost/aaa/bbb/index_asd | controller/web/aaa/bbb/indexAsd.php |
🐫 驼峰命名转换
URL 中的下划线会自动转换为驼峰命名:
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);}
⚠️ 注意事项
📌 命名规范
- ✅
getDataSources.php → class getDataSources - ❌
get_data_sources.php → class get_data_sources
控制器命名空间 要根据路径正确填写
// controller/cli/getDataSources.phpnamespacecontroller\cli;// controller/web/aaa/bbb/index.phpnamespacecontroller\web\aaa\bbb;
- 表名
attck_group → Model 文件 attckGroup.php
🔧 配置说明
CLI 参数白名单 需在 config/init.php 中配置
$configs['allow_argvs'] = ['getSoftware' => '获取软件列表','getDataSources' => '获取数据源',];
环境配置文件.env 不会被提交到 Git,请手动创建
🐛 常见问题
感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。
欢迎关注、分享、点赞、收藏、在看,我是微信公众号「PHP驿站」作者小皮。