# mphp **Repository Path**: yqs2009cl/mphp ## Basic Information - **Project Name**: mphp - **Description**: 一个文件实现php框架,包含路由,数据库,缓存,基本的函数等,急速初始化 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-22 - **Last Updated**: 2026-01-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MPHP - 单文件PHP框架 MPHP是一个轻量级的单文件PHP框架,提供了路由、控制器、模型、视图、数据库操作等核心功能,适合快速开发中小型Web应用。 ## 框架特性 - ✅ 单文件部署,简单易用 - ✅ 支持多种路由模式(正则路由、分段路由) - ✅ MVC架构设计 - ✅ 内置模板引擎 - ✅ 数据库操作支持(基于Medoo) - ✅ 丰富的工具函数(Session、Cookie、输入处理、缓存等) - ✅ 自动创建目录结构 - ✅ 支持模板缓存 - ✅ 内置XSS防护 ## 安装与配置 ### 安装 1. 下载`M.php`文件到您的项目目录 2. 在浏览器中访问该文件,框架会自动创建必要的目录结构 ### 目录结构 框架自动创建的目录结构如下: ``` ├── App/ # 应用目录 │ ├── Controller/ # 控制器目录 │ ├── Model/ # 模型目录 │ ├── Template/ # 模板目录 │ └── Config/ # 配置目录 ├── Cache/ # 缓存目录 ├── Lib/ # 第三方库目录 ├── Log/ # 日志目录 ├── Public/ # 静态资源目录 └── M.php # 框架核心文件 ``` ### 配置文件 配置文件位于`App/Config/config.php`,主要配置项包括: ```php return [ "router" => [ // 路由规则 ["GET|POST", "/nihao/[i:num]", "ces", "127.0.0.1"], ["GET|POST", "/c1/html_[*:dns]", "c1/htmlx", ""], ], "routerType" => 3, // 路由模式:1-正则路由,2-分段路由,3-混合模式 "domain" => "", // 绑定域名 "routerDef" => ["index", "index"], // 默认控制器和方法 "db" => [ // 数据库配置 'database_type' => 'mysql', 'database_name' => 'database_name', 'server' => '127.0.0.1', 'username' => 'username', 'password' => 'password', 'charset' => 'utf8', 'port' => 3306, 'prefix' => 'mtfy_', ] ]; ``` ## 路由系统 MPHP支持三种路由模式: 1. **正则路由**:使用AltoRouter风格的正则表达式定义路由 2. **分段路由**:基于URL路径分段的路由方式 3. **混合模式**:先尝试正则路由,匹配失败则使用分段路由 ### 正则路由示例 ```php // 在config.php中配置 "router" => [ ["GET", "/user/[i:id]", "user/profile", ""], // 匹配 /user/123 ["POST", "/login", "auth/login", ""], // 匹配 /login ["GET|POST", "/article/[*:slug]", "article/detail", ""], // 匹配 /article/my-first-post ] ``` ### 分段路由 分段路由的URL格式为:`/控制器/方法/参数1/参数2/...` 例如: - `/index/index` - 默认控制器和方法 - `/user/profile/123` - user控制器,profile方法,参数123 - `/article/list/page/5` - article控制器,list方法,参数page和5 ## 控制器 ### 创建控制器 控制器文件位于`App/Controller/`目录下,文件名以`Con.php`结尾,类名以`Con`结尾。 示例:创建一个`UserCon.php`控制器 ```php $id, 'name' => $name]); } public function __error() { // 错误处理方法,当请求的方法不存在时调用 echo '页面不存在'; } } ``` ### 控制器方法参数 控制器方法可以直接接收URL参数: ```php public function detail($id, $slug) { // $id 和 $slug 来自URL:/controller/detail/123/my-post echo "ID: {$id}, Slug: {$slug}"; } ``` ## 模型 ### 创建模型 模型文件位于`App/Model/`目录下,用于封装数据库操作和业务逻辑。 示例:创建一个`UserModel.php`模型 ```php db = mdb(); // 获取数据库连接 } // 获取用户信息 public function getUser($id) { return $this->db->get('user', '*', ['id' => $id]); } // 获取用户列表 public function getUserList($page = 1, $limit = 10) { $start = ($page - 1) * $limit; return $this->db->select('user', '*', [ 'LIMIT' => [$start, $limit] ]); } // 添加用户 public function addUser($data) { return $this->db->insert('user', $data); } } ``` ## 视图与模板 ### 创建模板 模板文件位于`App/Template/`目录下,默认后缀为`.html`。 示例:创建一个`user/profile.html`模板 ```html 用户资料

用户资料

ID: {$id}

姓名: {$name}

用户列表

{if $user['status'] == 1}

用户状态:激活

{else}

用户状态:禁用

{/if} ``` ### 渲染模板 在控制器中使用`view()`函数渲染模板: ```php // 渲染模板并输出 view('user/profile', ['id' => $id, 'name' => $name]); // 渲染模板并返回结果 $content = view('user/profile', ['id' => $id, 'name' => $name], true); echo $content; // 使用自定义模板后缀 view('user/profile', ['id' => $id], false, '.tpl'); ``` ### 模板变量转义 使用`e()`函数可以防止XSS攻击: ```html

安全输出:{e($user['name'])}

``` ## 数据库操作 MPHP使用Medoo作为数据库操作库,支持MySQL、SQLite、PostgreSQL等多种数据库。 ### 配置数据库 在`App/Config/config.php`中配置数据库连接信息: ```php "db" => [ 'database_type' => 'mysql', 'database_name' => 'test', 'server' => '127.0.0.1', 'username' => 'root', 'password' => '123456', 'charset' => 'utf8', 'port' => 3306, 'prefix' => 'mtfy_', ] ``` ### 获取数据库连接 ```php // 获取默认数据库连接 $db = mdb(); // 使用自定义配置获取数据库连接 $db = mdb([ 'database_type' => 'sqlite', 'database_file' => 'database.sqlite' ]); ``` ### 数据库操作示例 #### 查询数据 ```php // 获取单条记录 $user = $db->get('user', '*', ['id' => 1]); // 获取多条记录 $users = $db->select('user', '*', [ 'status' => 1, 'ORDER' => ['id' => 'DESC'], 'LIMIT' => 10 ]); // 条件查询 $users = $db->select('user', '*', [ 'AND' => [ 'status' => 1, 'age[>]' => 18 ] ]); ``` #### 插入数据 ```php $db->insert('user', [ 'name' => '张三', 'email' => 'zhangsan@example.com', 'created_at' => date('Y-m-d H:i:s') ]); // 获取插入的ID $id = $db->id(); ``` #### 更新数据 ```php $db->update('user', [ 'name' => '李四', 'updated_at' => date('Y-m-d H:i:s') ], [ 'id' => 1 ]); ``` #### 删除数据 ```php $db->delete('user', [ 'id' => 1 ]); ``` ## 工具函数 ### 输入处理 使用`I()`函数统一获取输入参数,自动进行XSS过滤。 ```php // 获取GET参数 $id = I('get.id'); $name = I('get.name', '默认值'); // 带默认值 // 获取POST参数 $email = I('post.email'); $password = I('post.password'); // 获取PUT参数 $data = I('put.data'); // 根据请求方法自动获取(GET或POST) $param = I('param.name'); // 获取全部GET参数 $getAll = I('get'); ``` ### Session操作 ```php // 设置Session session('user_id', 123); session('user_info', ['name' => '张三', 'age' => 20]); // 获取Session $userId = session('user_id'); $userInfo = session('user_info'); // 删除Session session('user_id', null); ``` ### Cookie操作 ```php // 设置Cookie cookie('token', 'abc123'); cookie('user_id', 123, 3600); // 有效期1小时 // 获取Cookie $token = cookie('token'); // 删除Cookie cookie('token', null); ``` ### 缓存操作 ```php // 设置缓存 cSet('user_123', ['name' => '张三'], 3600); // 有效期1小时 // 获取缓存 $user = cGet('user_123'); // 删除缓存 cDel('user_123'); ``` ### URL处理 ```php // 获取当前URL getUrl(); // 获取服务器域名 getServerDomain(); ``` ### IP处理 ```php // 获取用户真实IP getRealIp(); // 检查IP是否为内网IP isIntranetIp('192.168.1.1'); // 返回true ``` ### 加密解密 ```php // 加密字符串 $encrypted = lockString('敏感信息', 'E', '密钥'); // 解密字符串 $decrypted = lockString($encrypted, 'D', '密钥'); ``` ## 配置管理 ### 获取配置 ```php // 获取配置文件中的所有配置 $config = Config('config'); // 获取特定配置项 $dbConfig = Config('config.db'); $routerType = Config('config.routerType'); ``` ### 设置配置 ```php // 设置配置项 Config('config.site_name', '我的网站'); // 设置多个配置项 Config('config', [ 'site_name' => '我的网站', 'site_url' => 'http://example.com' ]); ``` ## 模板引擎 ### 模板语法 #### 变量输出 ```html

欢迎,{$name}!

用户ID:{$user.id}

安全输出:{e($user.name)}

``` #### 条件判断 ```html {if $user.status == 1}

用户状态:激活

{elseif $user.status == 0}

用户状态:禁用

{else}

用户状态:未知

{/if} ``` #### 循环 ```html ``` #### 包含文件 ```html {include 'common/header'} {include 'common/footer'} ``` ### 模板缓存 框架默认开启模板缓存,可以在`M.php`中修改: ```php define('TEMPLATE_CACHE', true); // true开启缓存,false关闭缓存 ``` 缓存文件位于`Cache/template_cache/`目录下。 ## 示例项目 ### 创建一个简单的博客系统 1. **配置数据库** ```php // App/Config/config.php return [ "routerType" => 3, "routerDef" => ["index", "index"], "db" => [ 'database_type' => 'mysql', 'database_name' => 'blog', 'server' => '127.0.0.1', 'username' => 'root', 'password' => '123456', 'charset' => 'utf8', 'port' => 3306, 'prefix' => 'blog_', ] ]; ``` 2. **创建控制器** ```php // App/Controller/ArticleCon.php getArticles($page, 10); view('article/list', ['articles' => $articles, 'page' => $page]); } public function detail($id) { $articleModel = new ArticleModel(); $article = $articleModel->getArticle($id); view('article/detail', ['article' => $article]); } } ``` 3. **创建模型** ```php // App/Model/ArticleModel.php db = mdb(); } public function getArticles($page = 1, $limit = 10) { $start = ($page - 1) * $limit; return $this->db->select('article', '*', [ 'ORDER' => ['id' => 'DESC'], 'LIMIT' => [$start, $limit] ]); } public function getArticle($id) { return $this->db->get('article', '*', ['id' => $id]); } } ``` 4. **创建模板** ```html 文章列表

文章列表

页码:{$page}

``` ```html {$article.title}

{$article.title}

发布时间:{$article.created_at}

{$article.content}
返回列表 ``` 5. **访问博客** - 访问`/article/list`查看文章列表 - 访问`/article/detail/1`查看文章详情 ## 框架配置 ### 修改框架常量 在`M.php`文件的开头可以修改框架的常量配置: ```php // 环境配置 define('APP_ENV', 'development'); // production为生产环境 // 设置时区 date_default_timezone_set('Asia/Shanghai'); // 错误信息 ini_set('display_errors','On'); error_reporting(E_ALL); // 模板缓存 define('TEMPLATE_CACHE', true); ``` ### 自定义目录结构 可以修改以下常量来自定义目录结构: ```php define('ROOT', dirname(__FILE__)); define('APP', ROOT.DIRECTORY_SEPARATOR.'App'); define('CONTROLLER', APP.DIRECTORY_SEPARATOR.'Controller'); define('MODEL', APP.DIRECTORY_SEPARATOR.'Model'); define('TEMPLATE', APP.DIRECTORY_SEPARATOR.'Template'); define('LIB', ROOT.DIRECTORY_SEPARATOR.'Lib'); define('CACHE', ROOT.DIRECTORY_SEPARATOR.'Cache'); define('CONFIG', APP.DIRECTORY_SEPARATOR.'Config'); define('LOG', ROOT.DIRECTORY_SEPARATOR.'Log'); define('STATIC', ROOT.DIRECTORY_SEPARATOR.'Public'); ``` ## 安全提示 1. 在生产环境中,将`APP_ENV`设置为`production` 2. 关闭错误显示:`ini_set('display_errors','Off');` 3. 使用`e()`函数过滤所有输出到页面的变量,防止XSS攻击 4. 使用`I()`函数获取输入参数,自动进行XSS过滤 5. 对敏感数据进行加密存储 6. 定期备份数据库和重要文件 ## 更新日志 ### 版本 2.0.0 - 重构了路由系统 - 优化了控制器和模板引擎 - 增强了安全防护 - 完善了工具函数 - 支持模板缓存 ## 许可证 MPHP框架采用MIT许可证开源。 ## 联系方式 如有问题或建议,请联系: - 邮箱:example@example.com - 网站:https://example.com