7 Star 22 Fork 8

myDcool / CornerPHP

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

CornerPHP

模块化, 静态化, 层级少, 易调试, 支持多数据库链接/读写分离
参考文档: http://doc.hearu.top/
原SummerPHP
若要支持命名空间请参考:https://gitee.com/myDcool/meng-php (推荐,如有bug两个框架会同步更新)

目录结构

/ Framework Root
|-- core    框架的核心类
|-- config  配置文件
|-- libs    第三方库
|-- model   模型类, 理论上用于写获取数据的具体逻辑, 只放置在根目录下, 任何控制器都可以调用到
|-- modules 项目模块
|-- view   视图文件
|-- tool   框架自带的登录注册模块的SQL,数据库配置文件样例,windows启动php-cgi的脚本
|-- update   框架自更新脚本
|-- static  静态文件存放
|-- cli.php  命令行下的入口文件 php cli.php -q router_name
`-- index.php   web入口文件

安装步骤

  1. 下载框架代码
  2. 配置NGINX
    server {
        listen       80;
        server_name  www.test.com;
    
        location ~ \.ico|jpg|gif|png|js|css$ {
            root E:/php/code/project/static;
            #expires 1h;
        }
    
        location / {
            root E:/php/code/project;
            fastcgi_pass   127.0.0.1:9720;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
            include        fastcgi_params;
        }
    
    }
  3. 修改hosts文件,添加:
    127.0.0.1 www.test.com
    
  4. 复制并修改 tool/dbConfig.json 文件中的数据库链接信息, 放到某个目录下; 修改入口文件index.php/cli.php 中的MYSQL_HOST_FILE值为dbConfig.json的文件路径
  5. 启动nginx; 启动php: php-cgi.exe(windows) 或 php-fpm (Linux)
  6. 在浏览器中输入 www.test.com 访问首页 (首页默认是数据库信息)

核心功能使用说明

URL路由

参考 core/Route.php (配置文件: config/RouteConfig.php)

  1. 配置: 所有对外可访问的接口都要在 config/RouteConfig.php中配置映射规则, 接口与真正的方法是映射关系, 不直接暴露源代码的方法名

  2. 例子: 获取文章列表的第二页接口的映射规则为

//路由配置:
'article_list_(\d+)' => 'index/index/route/page/$1'
//浏览器中输入URL:
http://www.test.com/article_list_2 
  1. 默认路由: 如果浏览器中只输入域名,没有URI,框架会找到 modules/index/index.php::index() 方法并执行 (也可以在RouteConfig.php中配置默认路由)

  2. 命令行路由:

php cli.php -q article_list_2

获取请求数据

参考 core/Request.php (数据校验的配置在config/VerifyConfig.php)

  1. 获取一个值
Request::Get('a', 'default');
Request::Post('a');
Request::Cookie('a');
Request::Route('a');
  1. 获取多个值, 没有则用默认值替代
Request::pickData(['a' => 0, 'b' => '', 'c' => '0'], 'get')
  1. 是否是post请求
Request::isPost();

返回结果

参考 core/Response.php

  1. 输出固定格式的json数据
$a = ['list' => [1,2,3,4]];

Response::json(10000, '用户列表', $a);

结果: {"code":10000,"msg":"\u7528\u6237\u5217\u8868","data":{"list":[1,2,3,4]}}
  1. 便捷调用

Response::json()的简写, 返回结构是一样的

//成功返回:

Response::success($a);
Response::success($a, '用户列表');
Response::success($a, '用户列表', 20000);
//失败返回:

Response::error('参数错误'); 
结果: {"code":"-1","msg":"\u53c2\u6570\u9519\u8bef","data":[]]}
Response::error('参数错误', $a); 
结果: {"code":"-1","msg":"\u53c2\u6570\u9519\u8bef","data":{"list":[1,2,3,4]},"url":""}
Response::error('参数错误', $a, 20001); 
结果: {"code":2001,"msg":"\u53c2\u6570\u9519\u8bef","data":{"list":[1,2,3,4]}}
  1. 返回任意结构的json数据
Response::jsonReturn($a); //{"list":[1,2,3,4]}
  1. 跳转
Response::notify('页面找不到啦~'); //页面找不到啦~
Response::redirect('充值成功, 页面即将跳转', 'http://www.hearu.top', 3);
Response::jump('http://www.hearu.top'); //直接跳转

返回HTML页面

参考: core/View.php

  1. 显示单个页面
View::display();
  1. 插入式显示页面(一个HTML页面框架, 里边有占位符:{{xxx}})
View::render();

数据库操作

更多增删改查操作请查看 modules/index/index.php::sql()

$rs = Test::link('note')
    ->fields('id,content')
    ->where(['uid' => 1, 'age' => 20])
    ->whereOp('id', '>', 1)
    ->whereIn('status', [0,1,2])
    ->order('id desc')
    ->limit(10)
    ->select()
    ->getAll();

    var_dump($rs, Test::$currentSql);
   

文件日志

参考 libs/FileLog.php
日志文件存放的目录在入口文件 index.php 和 cli.php 中配置: LOGPATH 和 LOG_LEVEL

  1. 常用
FileLog::info([xxx], 'tag');  //日志文件: LOGPATH/yyyy-mm-dd.log, 数组内容会被转为json

FileLog::error('xxxx');
  1. 设置日志跟踪ID
FileLog::$uuid = time().Fun::randChar(5);

Redis消息队列

  • 基础类在: libs/IRedis.php
  • 队列类在: model/RedisQueue.php
  • 队列名的配置在: config/RedisConfig.php
  • 具体实现参考: modules/cli/queue.php

DB消息队列

  • 队列类在: model/DBQueue.php
  • Topic的配置在: config/TopicConfig.php
  • 需要添加消费者的crontab (路由: cli_queue_db_consumer), 代码在 module/cli/queue_db.php

自带登录注册模块

  • 用户信息用cookie加密存储
  • 功能有: 登录/注册/退出, 其中注册提供图形验证码

自带前端单页面应用(SPA)样例

  • 按照上边说明安装好PHP运行环境
  • 配置好数据库信息(dbConfig.php)
  • 浏览器访问首页,即是一个可查看个多主机/数据库/表/字段等信息的web应用

自带多个js插件

路径: static/sys/js (使用方法在每个js文件的底部, 也可参考 https://exchange.hearu.top/ 一个个人商城项目)

脚本名 说明
zbActionSheet.js 弹窗表单, 支持 单行文本/多行文本/单选/多选/添加图片
zbEditTable.js 可编辑表格, 支持 创建可编辑的表格, 只读表格; 支持动态增加/删除行; 支持批量更改属性; 支持批量获取输入的值
zbImage.js 图片拼接: 支持创建二维码, 二维码加文字, 图片加二维码水印(依赖 在static/lib/jquery-qrcode.min.js); 支持创建浮层图片(点击后隐藏)
zbUploadImage.js 上传图片: 支持跟随上传其他参数, 支持图片压缩(依赖 static/lib/lrz.min.js)
zbList.js 列表: 支持onclick事件; 支持仅展示无响应事件的静态列表
zbPanel.js 可折叠的列表: 支持点击后回调
zbRequest.js 发起http请求: 支持缓存(依赖 static/lib/md5.min.js); 支持自定义成功后回调
zbRouter.js 单页面路由: 支持匹配URL调用指定的回调方法, 并无刷新更新浏览器地址栏URL
zbTabNav.js 导航栏: 支持点击后tab高亮, 调用回调, 页面无刷新切换, 可放在页面任意位置
zbToolBar.js 工具栏: 支持显示在底部或顶部显示
zbTool.js 工具方法合集: 获取年月日; 获取随机数; 字符串拼接补全; 获取URL参数; 跳转页面,刷新页面; 字符串和json互转; html转dom; 数组转HTML; 回到顶部; 等

安全建议

  • 尽量用post: 绝大部分的xss攻击是通过 <script> 等标签的 src 属性或href属性发起的"get"请求
  • 值中不能有\0截断符
  • 添加验证码: 防止外部构造表单请求, 要用在关键的地方(登录注册等), 不要影响到用户
  • 检测refer: 防止外部构造表单请求, 防止jsonp攻击, csrf攻击
  • 检测refer: 在返回头中构造白名单, header('Access-Control-Allow-Origin: http://www.a.com')
  • 一次性token: 用完就释放, 防止表单重复提交, 防止csrf攻击
  • include, file_get_content等使用时如果参数是URL,就得验证是否是白名单内的域名, 否则会包含/引入危险的文件
  • 对参数进行url_decode 防止 相对路径攻击(../../....)和javascript变相攻击
  • set cookie 的时候最好设置httponly, 这样就只能通过抓包来获取cookie注入脚本的方法就不行了
  • 获取cookie时限制跟ip相关, 这样通过xss的方法获取的cookie就不能被乱用了
  • html 标签可以指定本页面以后相对路径的根路径URL, 所以链接都要用全URL路径
  • 表单中过滤掉html注释符 "", 防止表单回填的时候被攻击
  • 表单中过滤掉select insert replace delete
  • 上传的临时文件夹不要有可执行的权限,最好用第三方存储
The MIT License (MIT) Copyright (c) 2018 myDcool Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

模块化,路由化,易调试的PHP框架。自带登录注册,Redis队列,接口验签, 数据库操作等模块;数据库支持虚拟表名,多主机读写分离,分库分表等实用功能;前端支持SPA,自研常用JS控件,常用CSS样式(flex布局为主)(原SummerPHP) 展开 收起
MIT
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/myDcool/SummerPHP.git
git@gitee.com:myDcool/SummerPHP.git
myDcool
SummerPHP
CornerPHP
master

搜索帮助