HookPHP - 基于 C 语言扩展开发的 PHP 框架


Apache
跨平台
C/C++

软件简介

前言

  • 众所周知,PHP7已经开始支持PHP强类型编程很久了,但是还是有那么多的程序员无论是理念还是实践依然停留在PHP弱类型的时代;

  • 再回首,开启1个新项目,总有些工作如轮回似的重复再重复,比如 用户管理权限管理配置管理菜单管理语言管理、DB建模、模板管理 等;

  • 观今朝,高级架构师、IT大佬、CXO满天飞,但是真正为PHP行业进步做出贡献的寥寥无几,大多处在赶项目、解BUG、开会、扯皮、甩锅、宫斗、包装、升职、跳槽、转行、养老、复制、粘贴等;

作者LetWang对此深表痛心,决定从我做起,改变现状,加大PHP在行业的影响力!

此框架无论是作为PHP7高级教程,还是作为行业通用基础组件业务支撑,再或者是作为PHP开源宝库贡献一份力量,HookPHP的应运而生都有着划时代的重大意义!

HookPHP项目地址:https://github.com/letwang/HookPHP,如果大家喜欢的话,请给个Star,让更多的人看到优秀的开源项目,为PHP发展贡献一把力量!QQ架构探讨群:679116380

背景

创作此框架的作者是LetWang,2007年ASP,2008年ASP.NET(C#),从2009年一直PHP。

虽然中间几次创业,看过太多的源码,也曾服务于海外多家机构,但越是这样越发现自己的渺小: 一个人无法改变太多,需要带动整个群体一起进步!

纵观PHP行业主流框架,大概有 LaravelPhalconSymfonyCodeIgniter
YiiAuraCakephpZendKohanaFuelPHP
SlimTypo3ThinkPHPFlightPHPixieYaf
SwooleNetteDrupalWorkermanPHPDevShell
AkelosPradoZooPQPHP
等,但是至今仍然没有一款像HookPHP框架这样基于PHP7强类型写法、开源免费、解决企业启动新项目时的重复劳动问题!

酝酿近10年,千魂梦绕,终崛起!向多年前《电商平台技术架构 多用户商城 仿天猫 淘宝 亚马逊 当当 阿里巴巴 大数据模块 低成本运维
高效开发》
致敬!

简介

一款基于C扩展搭建支持AI在线编程的PHP框架!

理念

配置即产出,所想即所得。

使命

解决企业启动新项目时的重复劳动问题。

架构

特点

基于C系扩展搭建

基于PHP强大的WEB迅速开发能力,性能瓶颈用C扩展解决,后期如果业务需要不排除PHP
shell_exec
调用GO来支持天然并发.

SQL中台集中管控

既避免业务代码中到处零散的SQL拼接,也避免ORM极差的性能瓶颈,业务SQL统一定义,一处定义多处随意使用。既方便SQL安全审计,又方便DBA建模、升级、优化。

集成业务基础组件

  1. 权限管理

  2. 组件管理

  3. 用户管理

  4. 平台管理

  5. 配置管理

  6. 报错管理

  7. 语言管理

  8. 登录管理

  9. 超管管理

  10. 菜单管理

  11. 模板管理

  12. 翻译管理

集成行业主流特性

微服务、多线程、多进程、常驻内存、主从分离、负载均衡…

支持组件在线管控

用户自主上传组件
在线达到组件 安装、卸载、启用、禁用、排序、移动、归类…

支持多模板

根据节假日等不同规则动态显示自定义模板,在线任意选择模板显示风格

支持多平台

PAAS、ERP、电商、博客、官网
众多平台,可以部署到一台服务器,共享类库、session、文件....

支持多域名

平台对应绑定独立域名或子域映射到对应平台

支持多终端

默认Bootstrap模板,多终端(手机、PC、Ipad…)设备、分辨率,风格自适应

支持多语言

国际化语言支持,中文、英语、俄语、西班牙语…

一键安装

傻瓜式部署,一键初始化系统

云端管控

通过总admin后台,管控各大平台配置

常驻内存

随PHP服务器启动,业务信息常驻内存
加速PHP

权限体系

集成强大的RBAC体系,后台一键配置立即生效。

API RESTful

API支持RESTful风格,API产业化经济建设支持

前后端分离

API在手,随时重构适合多变的业务

目录

//HookPHP基于C系扩展YAF搭建 感谢鸟哥
.
├── app//平台文件夹列表 下面每1个文件夹都是1个平台
│   ├── admin//【平台1】 中心管控 总后台,管理admin平台、paas平台、erp平台...
│   │   ├── bin//终端命令
│   │   │   ├── install.php//一键安装初始化该平台
│   │   │   └── queue.php//队列消费服务(通过RabbitMQ实现)
│   │   ├── Bootstrap.php//平台运行初始化引导
│   │   ├── controllers//控制器
│   │   │   ├── Abstract.php//抽象层封装
│   │   │   ├── Acl//RBAC权限体系
│   │   │   │   ├── Group.php//用户组
│   │   │   │   ├── Index.php//列表
│   │   │   │   ├── Resource.php//资源
│   │   │   │   ├── Role.php//角色
│   │   │   │   └── User.php//用户
│   │   │   ├── App.php//多平台管理
│   │   │   ├── Config.php//云端配置管理
│   │   │   ├── Error.php//统一收集错误处理
│   │   │   ├── Hook//用户上传动态组件管理
│   │   │   │   ├── Index.php//事件管理
│   │   │   │   └── Module.php//组件管理
│   │   │   ├── Index.php//首页仪表盘大数据大屏展示
│   │   │   ├── Lang.php//多语言管理
│   │   │   ├── Login.php//统一登录服务
│   │   │   ├── Manager.php//超级管理员管理
│   │   │   ├── Menu.php//多菜单管理
│   │   │   ├── Theme.php//多模板管理
│   │   │   ├── Translation.php//翻译管理 从谷歌、Bing、百度等源智能翻译数据
│   │   │   └── User//多用户管理
│   │   │       └── Index.php//列表
│   │   ├── hooks//用户上传动态组件列表
│   │   │   ├── One//组件1
│   │   │   │   └── One.php//自动挂载到事件、回调
│   │   │   ├── Three//组件2
│   │   │   │   └── Three.php
│   │   │   └── Two//组件3
│   │   │       └── Two.php
│   │   ├── init.php//平台运行初始化
│   │   ├── library//admin平台运行私有类库
│   │   ├── models//模型 CRUD
│   │   │   ├── Abstract.php//抽象层封装
│   │   │   ├── Acl//RBAC权限体系
│   │   │   │   ├── Group.php//用户组
│   │   │   │   ├── Index.php//列表
│   │   │   │   ├── Resource.php//资源
│   │   │   │   ├── Role.php//角色
│   │   │   │   └── User.php//用户
│   │   │   ├── App.php//多平台
│   │   │   ├── Config.php//云端配置
│   │   │   ├── Hook//用户上传动态组件
│   │   │   │   ├── Index.php//事件
│   │   │   │   └── Module.php//组件
│   │   │   ├── Lang.php//多语言
│   │   │   ├── Manager.php//超级管理员
│   │   │   ├── Menu.php//菜单
│   │   │   ├── Theme.php//模板
│   │   │   ├── Translation.php//远程智能翻译
│   │   │   └── User//多用户
│   │   │       └── Index.php//列表
│   │   ├── modules//应用列表 下面每1个文件夹都是1个应用,应用可以随意在平台间智能复制共享
│   │   │   ├── Api//【应用1】API服务 遵循RESTful规范 功能同上述 控制器 中目录、文件介绍 一一对应
│   │   │   │   └── controllers
│   │   │   │       ├── Acl
│   │   │   │       │   ├── Group.php
│   │   │   │       │   ├── Index.php
│   │   │   │       │   ├── Resource.php
│   │   │   │       │   ├── Role.php
│   │   │   │       │   └── User.php
│   │   │   │       ├── App.php
│   │   │   │       ├── Config.php
│   │   │   │       ├── Hook
│   │   │   │       │   ├── Index.php
│   │   │   │       │   └── Module.php
│   │   │   │       ├── Lang.php
│   │   │   │       ├── Manager.php
│   │   │   │       ├── Menu.php
│   │   │   │       ├── Translation.php
│   │   │   │       └── User
│   │   │   │           └── Index.php
│   │   │   ├── Cart//【应用2】购物车
│   │   │   │   ├── controllers
│   │   │   │   │   └── Index.php
│   │   │   │   └── views
│   │   │   │       └── default
│   │   │   │           └── index
│   │   │   │               └── index.phtml
│   │   │   ├── Order//【应用3】订单系统
│   │   │   │   ├── controllers
│   │   │   │   │   └── Index.php
│   │   │   │   └── views
│   │   │   │       └── default
│   │   │   │           └── index
│   │   │   │               └── index.phtml
│   │   │   └── Payment//【应用4】支付网关
│   │   │       ├── controllers
│   │   │       │   └── Index.php
│   │   │       └── views
│   │   │           └── default
│   │   │               └── index
│   │   │                   └── index.phtml
│   │   ├── plugins//插件
│   │   │   └── Hook.php//每个插件行为一一映射到事件
│   │   └── views//视图 支持多终端手机、PC、Ipad...设备、分辨率,风格自适应(通过Bootstrap实现)
│   │       └── default//【模板1】默认模板
│   │           ├── bottom.phtml//通用底部
│   │           ├── error//通用底部
│   │           │   └── error.phtml
│   │           ├── index//通用首页
│   │           │   └── index.phtml
│   │           └── top.phtml//通用头部
│   ├── erp//【平台2】下属目录功能 同【平台1】
│   │   ├── bin
│   │   │   └── install.php
│   │   ├── Bootstrap.php
│   │   ├── controllers
│   │   │   ├── Abstract.php
│   │   │   ├── Error.php
│   │   │   └── Index.php
│   │   ├── init.php
│   │   ├── plugins
│   │   │   └── Hook.php
│   │   └── views
│   │       └── default
│   │           ├── bottom.phtml
│   │           ├── error
│   │           │   └── error.phtml
│   │           ├── index
│   │           │   └── index.phtml
│   │           └── top.phtml
│   └── paas//【平台3】下属目录功能 同【平台1】
│       ├── bin
│       │   └── install.php
│       ├── Bootstrap.php
│       ├── controllers
│       │   ├── Abstract.php
│       │   ├── Error.php
│       │   └── Index.php
│       ├── init.php
│       ├── plugins
│       │   └── Hook.php
│       └── views
│           └── default
│               ├── bottom.phtml
│               ├── error
│               │   └── error.phtml
│               ├── index
│               │   └── index.phtml
│               └── top.phtml
├── conf//系统常量 常驻内存(通过Yaconf实现)
│   ├── admin_lang_1.ini//admin平台中文语言包
│   ├── admin_product.ini//admin平台生产配置【DB、常用正则、秘钥...】
│   ├── admin_table.ini//admin平台表结构单机缓存静态化
│   ├── erp_lang_1.ini//erp平台中文语言包
│   ├── erp_product.ini//erp平台生产配置【DB、常用正则、秘钥...】
│   ├── erp_table.ini//erp平台表结构单机缓存静态化
│   ├── paas_lang_1.ini//paas平台中文语言包
│   ├── paas_product.ini//paas平台生产配置【DB、常用正则、秘钥...】
│   ├── paas_table.ini//paas平台表结构单机缓存静态化
│   └── pinyin.ini//平台通用汉字转拼音服务
├── log//平台日志(通过SeasLog实现)
│   ├── default//常规日志
│   └── user//用户行为日志
├── public//系统单入口,下属admin、erp、paas与上述app下属文件夹一一对应,此处可以对应绑定域名 支持多域名配置
│   ├── admin//www.admin.com
│   │   ├── assets//前端资源文件(通过Nginx UPS、Varnish 实现CDN、动静分离 HTTP Cache)
│   │   ├── index.php//单入口文件
│   │   ├── robots.txt//SEO蜘蛛爬取规则
│   │   └── sitemap.xml//站点地图生成 优化SEO
│   ├── erp//www.erp.com
│   │   ├── index.php
│   │   ├── robots.txt
│   │   └── sitemap.xml
│   └── paas//www.paas.com
│       ├── index.php
│       ├── robots.txt
│       └── sitemap.xml
└── vendor//平台公共类库
    ├── Hook//【类库1】系统默认
    │   ├── Batch//批量处理类
    │   │   ├── Insert.php
    │   │   └── Process.php
    │   ├── Cache//全局单例、缓存类
    │   │   └── Cache.php
    │   ├── Crypt//加密、解密类
    │   │   ├── PassWord.php
    │   │   └── Rijndael.php
    │   ├── Data//大数据处理类
    │   │   └── ArrayUtils.php
    │   ├── Date//日期控件类
    │   │   └── Calendar.php
    │   ├── Db//DB操作类
    │   │   ├── MongoConnect.php
    │   │   ├── Orm.php
    │   │   ├── PdoConnect.php
    │   │   └── RedisConnect.php
    │   ├── Extract//压缩包在线解压类
    │   │   ├── AbstractAdapter.php
    │   │   ├── ExtractInterface.php
    │   │   ├── Extract.php
    │   │   ├── RarAdapter.php
    │   │   └── ZipAdapter.php
    │   ├── File//文件类
    │   │   └── File.php
    │   ├── Form//表单类
    │   │   └── Form.php
    │   ├── Hook//组件类
    │   │   ├── Hook.php//事件管控类
    │   │   └── Module.php//组件管控类
    │   ├── Http//Http处理类
    │   │   ├── Curl.php
    │   │   └── Header.php
    │   ├── Image//图片处理类
    │   │   └── Image.php
    │   ├── Paginator//分页类
    │   │   └── Paginator.php
    │   ├── Sql//SQL集中化管控
    │   │   ├── Acl.php
    │   │   ├── App.php
    │   │   ├── Hook.php
    │   │   ├── Install.php
    │   │   ├── Login.php
    │   │   ├── Menu.php
    │   │   ├── Module.php
    │   │   └── Table.php
    │   ├── Tika//文件内容提取类(通过Tika实现)
    │   │   └── Tika.php
    │   ├── Tools//常用工具类
    │   │   └── Tools.php
    │   ├── Translation//多语言远程智能翻译服务
    │   │   ├── AbstractAdapter.php
    │   │   ├── BaiduAdapter.php
    │   │   ├── BingAdapter.php
    │   │   ├── GoogleAdapter.php
    │   │   ├── TranslationInterface.php
    │   │   └── Translation.php
    │   └── Validate//验证类
    │       └── Validate.php
    ├── mongodb//【类库2】外部Composer引入
    │   └── mongodb
    ├── phpmailer//【类库3】外部Composer引入
    │   └── phpmailer
    └── symfony//【类库4】外部Composer引入
        └── process

环境

PHP 7.3

sudo apt-get install php7.3-common php7.3-cli php7.3-bcmath php7.3-dev php7.3-xml php7.3-opcache php7.3-mbstring php7.3-mysql php7.3-fpm php7.3-gd php7.3-zip php7.3-curl php7.3-intl php7.3-json

C Extensions

Yaf

sudo pecl install yaf

[yaf]
extension=yaf
yaf.use_namespace = 1
yaf.use_spl_autoload = 1
yaf.library = /home/letwang/workspace/HookPHP/vendor/

Yaconf

sudo pecl install yaconf

[yaconf]
extension=yaconf
yaconf.directory = /home/letwang/workspace/HookPHP/conf/

gRPC【可选】

sudo pecl install grpc

[grpc]
extension=grpc

SeasLog【可选】

sudo pecl install seaslog

[seaslog]
extension=seaslog
seaslog.trace_notice=1
seaslog.trace_warning=1
seaslog.default_basepath='/home/letwang/workspace/HookPHP/log'
seaslog.default_template = '%T | %L | %P | %Q | %t | %M | %H | %D | %R | %m | %I | %F | %U | %u | %C'

Xhprof【可选】

git clone https://github.com/longxinH/xhprof.git ./xhprof
cd xhprof/extension/
phpize7.3
./configure --with-php-config=php-config7.3
make && sudo make install
sudo apt-get install graphviz-dev

[xhprof]
extension=xhprof
xhprof.output_dir = '/var/log/xhprof'

Rar【可选】

sudo pecl install rar

[rar]
extension=rar

php.ini【可选】

[Session]
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?weight=1&auth=123456&database=0, tcp://127.0.0.1:6379?weight=2&auth=123456&database=0"

hosts

sudo vim /etc/hosts

127.0.0.1 www.admin.com
127.0.0.1 www.erp.com
127.0.0.1 www.paas.com

Nginx 1.15.5

server {
    listen 80;
    root /home/letwang/workspace/HookPHP/public/admin/;
    index index.html index.htm index.php;
    error_log /var/log/nginx/www.admin.com-error.log error;access_log /var/log/nginx/www.admin.com-access.log combined;
    server_name www.admin.com;

    if (!-e $request_filename) {rewrite ^/(.*)  /index.php?$1 last;}

    location ~ \.php$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
     }
}

server {
    listen 80;
    root /home/letwang/workspace/HookPHP/public/erp/;
    index index.html index.htm index.php;
    error_log /var/log/nginx/www.erp.com-error.log error;access_log /var/log/nginx/www.erp.com-access.log combined;
    server_name www.erp.com;

    if (!-e $request_filename) {rewrite ^/(.*)  /index.php?$1 last;}

    location ~ \.php$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
     }
}

server {
    listen 80;
    root /home/letwang/workspace/HookPHP/public/paas/;
    index index.html index.htm index.php;
    error_log /var/log/nginx/www.paas.com-error.log error;access_log /var/log/nginx/www.paas.com-access.log combined;
    server_name www.paas.com;

    if (!-e $request_filename) {rewrite ^/(.*)  /index.php?$1 last;}

    location ~ \.php$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
     }
}

MySQL 8.0.12

ProxySQL【可选】

wget https://github.com/sysown/proxysql/releases/download/v1.4.12/proxysql_1.4.12-ubuntu16_amd64.deb
sudo dpkg -i proxysql_1.4.12-ubuntu16_amd64.deb

Redis 5.0

RedisProxy【可选】

sudo pecl install redis

[redis]
extension=redis

[MongoDB 4.2](https://docs.mongodb.com/manual/administration/install-on-

linux/)

sudo pecl install mongodb

[mongodb]
extension=mongodb

[MongoDB Sharded Cluster](https://docs.mongodb.com/manual/core/sharded-

cluster-components/)【可选】

RabbitMQ 3.7.8【可选】

sudo apt-get install erlang-nox
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.8/rabbitmq-server_3.7.8-1_all.deb
sudo rabbitmq-server start
sudo rabbitmqctl status
sudo rabbitmq-plugins enable rabbitmq_management

AMQP【可选】

wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.zip
cd rabbitmq-c-0.9.0
mkdir build && cd build
cmake ..
cmake --build .
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
cmake --build . --target install
sudo pecl install amqp

[amqp]
extension=amqp.so
amqp.login=admin
amqp.password=12345678

Sphinx 3.0.3【可选】

wget -P /home/sphinx http://sphinxsearch.com/files/sphinx-3.0.3-facc3fb-linux-amd64.tar.gz

Varnish 6.1.0【可选】

curl -L https://packagecloud.io/varnishcache/varnish61/gpgkey | sudo apt-key add -
echo "deb https://packagecloud.io/varnishcache/varnish61/ubuntu/ xenial main\ndeb-src https://packagecloud.io/varnishcache/varnish61/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/varnishcache_varnish61.list

sudo apt-get update
sudo apt-get install varnish

sudo apt-get install libvarnishapi1
sudo apt-get install libvarnishapi-dev
sudo pecl install varnish

[varnish]
extension=varnish

Composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Tika【可选】

wget -P /home/letwang/workspace/HookPHP/vendor/Hook/Tika http://mirrors.hust.edu.cn/apache/tika/tika-app-1.19.1.jar

安装

cd ~/workspace/HookPHP/
sudo chmod 777 -R ./log

composer.phar install

php app/admin/bin/install.php
php app/erp/bin/install.php
php app/paas/bin/install.php

访问

http://www.admin.com/
http://www.erp.com/
http://www.paas.com/

admin@hookphp.com
12345678

演示

HookPHP

业务

目前只集成

admin
中心管控统一后台,目前重点开发中…

paas PAAS系统

erp ERP系统

每个域名绑定好平台单入口,可以建设众多平台。

未来

目前HookPHP还未发布stable 0.1版本,虽然有众多用户焦急的催促等待我,但我心目中的stable
0.1版本至少应该可以达到:在线创建平台、在线建模、在线生成MVC,初步达到AI在线编程,代码生产代码的可用版本。

当0.1 stable版本实现后,HookPHP基石应该初步落地,接下来开发天猫、亚马逊这种多用户商城0.1版。

以后,众多第三方厂商(个人、组织、企业)将会以提供HookPHP组件开发、模板开发、定制服务为荣,实现 开发者、用户、HookPHP官方 等多方双赢局面。

路 还很长,我 还很年轻,生命不息 战斗不止 做点有意义的事情 加油!