前言
众所周知,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行业主流框架,大概有Laravel、Phalcon、Symfony、CodeIgniter、Yii、Aura、CakePHP、Zend、Kohana、FuelPHP、Slim、Typo3、ThinkPHP、Flight、PHPixie、Yaf、Swoole、Nette、Drupal、Workerman、PHPDevShell、Akelos、Prado、ZooP、QPHP等,但是至今仍然没有一款像HookPHP框架这样基于PHP7强类型写法、开源免费、解决企业启动新项目时的重复劳动问题!
酝酿近10年,千魂梦绕,终崛起!向多年前《电商平台技术架构 多用户商城 仿天猫 淘宝 亚马逊 当当 阿里巴巴 大数据模块 低成本运维 高效开发》致敬!
简介
理念
配置即产出,所想即所得。
使命
解决企业启动新项目时的重复劳动问题。
架构图
特点
基于C系扩展搭建
基于PHP强大的WEB迅速开发能力,性能瓶颈用C扩展解决,后期如果业务需要不排除PHPshell_exec调用GO来支持天然并发.
sql中台集中管控
既避免业务代码中到处零散的sql拼接,也避免ORM极差的性能瓶颈,业务sql统一定义,一处定义多处随意使用。既方便sql安全审计,又方便DBA建模、升级、优化。
集成业务通用基础组件
用户管理、资源管理、角色管理、权限管理、配置管理、翻译管理、SEO管理、多菜单管理、多语言管理、多模块管理、多模板管理、多终端管理、多平台管理…
集成行业主流特性
微服务、多线程、多进程、常驻内存、主从分离、负载均衡…
支持组件在线管控
用户自主上传组件 在线达到组件 安装、卸载、启用、禁用、排序、移动、归类…
支持多模板
根据节假日等不同规则动态显示自定义模板,在线任意选择模板显示风格
支持多平台
PAAS、ERP、电商、博客、官网 等众多平台,可以部署到一台服务器,共享类库、session、文件…
支持多域名
平台对应绑定独立域名或子域映射到对应平台
支持多终端
默认Bootstrap模板,多终端(手机、PC、Ipad…)设备、分辨率,风格自适应
支持多语言
一键安装
傻瓜式部署,一键初始化系统
云端管控
通过总admin后台,管控各大平台配置
常驻内存
权限体系
集成强大的RBAC体系,后台一键配置立即生效。
APIRESTful
前后端分离
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权限体系
│ │ │ │ ├── Index.PHP//列表
│ │ │ │ ├── Resource.PHP//资源
│ │ │ │ ├── Role.PHP//角色
│ │ │ ├── App.PHP//多平台管理
│ │ │ ├── Config.PHP//云端配置管理
│ │ │ │ ├── Index.PHP//事件管理
│ │ │ │ └── Module.PHP//组件管理
│ │ │ ├── Index.PHP//首页仪表盘大数据大屏展示
│ │ │ ├── Lang.PHP//多语言管理
│ │ │ ├── Manager.PHP//超级管理员管理
│ │ │ ├── Theme.PHP//多模板管理
│ │ │ ├── Translation.PHP//翻译管理 从谷歌、Bing、百度等源智能翻译数据
│ │ │ └── User//多用户管理
│ │ │ └── Index.PHP//列表
│ │ │ ├── One//组件1
│ │ │ │ └── One.PHP//自动挂载到事件、回调
│ │ │ ├── Three//组件2
│ │ │ │ └── Three.PHP
│ │ │ └── Two//组件3
│ │ │ └── Two.PHP
│ │ ├── init.PHP//平台运行初始化
│ │ ├── library//admin平台运行私有类库
│ │ ├── models//模型 CRUD
│ │ │ ├── Abstract.PHP//抽象层封装
│ │ │ ├── Acl//RBAC权限体系
│ │ │ │ ├── Index.PHP//列表
│ │ │ │ ├── Resource.PHP//资源
│ │ │ │ ├── Role.PHP//角色
│ │ │ ├── App.PHP//多平台
│ │ │ ├── Config.PHP//云端配置
│ │ │ │ ├── Index.PHP//事件
│ │ │ │ └── Module.PHP//组件
│ │ │ ├── Lang.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)
│ │ ├── 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
│ │ ├── Acl.PHP
│ │ ├── App.PHP
│ │ ├── Hook.PHP
│ │ ├── Install.PHP
│ │ ├── Login.PHP
│ │ ├── Menu.PHP
│ │ ├── Module.PHP
│ │ └── Table.PHP
│ │ └── 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
sudo pecl install mongodb
[mongodb]
extension=mongodb
MongoDB Sharded Cluster【可选】
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 mainndeb-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
访问
http://www.admin.com/
http://www.erp.com/
http://www.paas.com/
admin@hookPHP.com
12345678
演示
业务
目前只集成
admin 中心管控统一后台,目前重点开发中…
paas PAAS系统
erp ERP系统
每个域名绑定好平台单入口,可以建设众多平台。
未来
目前HookPHP还未发布releases 0.1版本,虽然有众多用户焦急的催促等待我,但我心目中的releases 0.1版本至少应该可以达到:在线创建平台、在线建模、在线生成MVC,初步达到AI在线编程,代码生产代码的可用版本。
当0.1版本实现后,HookPHP基石应该初步落地,接下来开发天猫、亚马逊这种多用户商城0.1版。
路 还很长,我 还很年轻,生命不息 战斗不止 做点有意义的事情 加油!
原文链接:https://www.f2er.com/thinkphp/60497.html