• 眾所周知,PHP7已經開始支持PHP7強類型編程很久了,但是還是有那麼多的程序員無論是理念還是實踐依然停留在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行業主流框架,大概有LaravelPhalconSymfonyCodeIgniterYiiAuraCakephpZendKohanaFuelPHPSlimTypo3ThinkPHPFlightPHPixieYafSwooleNetteDrupalWorkermanPHPDevShellAkelosPradoZooPQPHP等,但是至今仍然沒有一款像HookPHP框架這樣基於PHP7強類型寫法、開源免費、解決企業啟動新項目時的重複勞動問題!

醞釀近10年,千魂夢繞,終崛起!向多年前《電商平臺技術架構 多用戶商城 仿天貓 淘寶 亞馬遜 噹噹 阿里巴巴 大數據模塊 低成本運維 高效開發》致敬!

簡介

一款基於C擴展搭建支持AI在線編程的PHP框架!

理念

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

特點

基於C系擴展搭建

基於PHP強大的WEB迅速開發能力,性能瓶頸用C擴展解決,後期如果業務需要不排除PHP shell_exec 調用GO來支持天然並發.

SQL中臺集中管控

既避免業務代碼中到處零散的SQL拼接,也避免ORM極差的性能瓶頸,業務SQL統一定義,一處定義多處隨意使用。既方便SQL安全審計,又方便DBA建模、升級、優化。

集成業務通用基礎組件

用戶管理、資源管理、角色管理、許可權管理、配置管理、翻譯管理、SEO管理、多菜單管理、多語言管理、多模塊管理、多模板管理、多終端管理、多平臺管理…

集成行業主流特性

微服務、多線程、多進程、常駐內存、主從分離、負載均衡…

支持組件在線管控

用戶自主上傳組件 在線達到組件 安裝、卸載、啟用、禁用、排序、移動、歸類...

支持多模板

根據節假日等不同規則動態顯示自定義模板,在線任意選擇模板顯示風格

支持多平臺

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

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 main
deb-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/

[email protected]
12345678

演示

業務

目前只集成

admin 中心管控統一後臺,目前重點開發中...

paas PAAS系統

erp ERP系統

每個域名綁定好平臺單入口,可以建設眾多平臺。

未來

目前HookPHP還未發布releases 0.1版本,雖然有眾多用戶焦急的催促等待我,但我心目中的releases 0.1版本至少應該可以達到:在線創建平臺、在線建模、在線生成MVC,初步達到AI在線編程,代碼生產代碼的可用版本。

當0.1版本實現後,HookPHP基石應該初步落地,接下來開發天貓、亞馬遜這種多用戶商城0.1版。

路 還很長,我 還很年輕,生命不息 戰鬥不止 做點有意義的事情 加油!


推薦閱讀:
相關文章