HookPHP基于 C 語言擴展開發(fā)的 PHP 框架
前言
眾所周知,PHP7已經開始支持PHP強類型編程很久了,但是還是有那么多的程序員無論是理念還是實踐依然停留在PHP弱類型的時代;
再回首,開啟1個新項目,總有些工作如輪回似的重復再重復,比如 用戶管理、權限管理、配置管理、菜單管理、語言管理、DB建模、模板管理等;
觀今朝,高級架構師、IT大佬、CXO滿天飛,但是真正為PHP行業(yè)進步做出貢獻的寥寥無幾,大多處在趕項目、解BUG、開會、扯皮、甩鍋、宮斗、包裝、升職、跳槽、轉行、養(yǎng)老、復制、粘貼等;
作者LetWang對此深表痛心,決定從我做起,改變現(xiàn)狀,加大PHP在行業(yè)的影響力!
此框架無論是作為PHP7高級教程,還是作為行業(yè)通用基礎組件業(yè)務支撐,再或者是作為PHP開源寶庫貢獻一份力量,HookPHP的應運而生都有著劃時代的重大意義!
HookPHP項目地址:https://github.com/letwang/HookPHP,如果大家喜歡的話,請給個Star,讓更多的人看到優(yōu)秀的開源項目,為PHP發(fā)展貢獻一把力量!QQ架構探討群:679116380
背景
創(chuàng)作此框架的作者是LetWang,2007年ASP,2008年ASP.NET(C#),從2009年一直PHP。
雖然中間幾次創(chuàng)業(yè),看過太多的源碼,也曾服務于海外多家機構,但越是這樣越發(fā)現(xiàn)自己的渺?。?strong>一個人無法改變太多,需要帶動整個群體一起進步!
縱觀PHP行業(yè)主流框架,大概有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強類型寫法、開源免費、解決企業(yè)啟動新項目時的重復勞動問題!
醞釀近10年,千魂夢繞,終崛起!向多年前《電商平臺技術架構 多用戶商城 仿天貓 淘寶 亞馬遜 當當 阿里巴巴 大數(shù)據模塊 低成本運維 高效開發(fā)》致敬!
簡介
一款基于C擴展搭建支持AI在線編程的PHP框架!
理念
配置即產出,所想即所得。
使命
解決企業(yè)啟動新項目時的重復勞動問題。
架構
特點
基于C系擴展搭建
基于PHP強大的WEB迅速開發(fā)能力,性能瓶頸用C擴展解決,后期如果業(yè)務需要不排除PHP shell_exec 調用GO來支持天然并發(fā).
SQL中臺集中管控
既避免業(yè)務代碼中到處零散的SQL拼接,也避免ORM極差的性能瓶頸,業(yè)務SQL統(tǒng)一定義,一處定義多處隨意使用。既方便SQL安全審計,又方便DBA建模、升級、優(yōu)化。
集成業(yè)務基礎組件
集成行業(yè)主流特性
微服務、多線程、多進程、常駐內存、主從分離、負載均衡…
支持組件在線管控
用戶自主上傳組件 在線達到組件 安裝、卸載、啟用、禁用、排序、移動、歸類...
支持多模板
根據節(jié)假日等不同規(guī)則動態(tài)顯示自定義模板,在線任意選擇模板顯示風格
支持多平臺
PAAS、ERP、電商、博客、官網 等眾多平臺,可以部署到一臺服務器,共享類庫、session、文件....
支持多域名
平臺對應綁定獨立域名或子域映射到對應平臺
支持多終端
默認Bootstrap模板,多終端(手機、PC、Ipad...)設備、分辨率,風格自適應
支持多語言
國際化語言支持,中文、英語、俄語、西班牙語...
一鍵安裝
傻瓜式部署,一鍵初始化系統(tǒng)
云端管控
通過總admin后臺,管控各大平臺配置
常駐內存
隨PHP服務器啟動,業(yè)務信息常駐內存 加速PHP
權限體系
集成強大的RBAC體系,后臺一鍵配置立即生效。
API RESTful
API支持RESTful風格,API產業(yè)化經濟建設支持
前后端分離
API在手,隨時重構適合多變的業(yè)務
目錄
//HookPHP基于C系擴展YAF搭建 感謝鳥哥 . ├── app//平臺文件夾列表 下面每1個文件夾都是1個平臺 │ ├── admin//【平臺1】 中心管控 總后臺,管理admin平臺、paas平臺、erp平臺... │ │ ├── bin//終端命令 │ │ │ ├── install.php//一鍵安裝初始化該平臺 │ │ │ └── queue.php//隊列消費服務(通過RabbitMQ實現(xiàn)) │ │ ├── Bootstrap.php//平臺運行初始化引導 │ │ ├── controllers//控制器 │ │ │ ├── Abstract.php//抽象層封裝 │ │ │ ├── Acl//RBAC權限體系 │ │ │ │ ├── Group.php//用戶組 │ │ │ │ ├── Index.php//列表 │ │ │ │ ├── Resource.php//資源 │ │ │ │ ├── Role.php//角色 │ │ │ │ └── User.php//用戶 │ │ │ ├── App.php//多平臺管理 │ │ │ ├── Config.php//云端配置管理 │ │ │ ├── Error.php//統(tǒng)一收集錯誤處理 │ │ │ ├── Hook//用戶上傳動態(tài)組件管理 │ │ │ │ ├── Index.php//事件管理 │ │ │ │ └── Module.php//組件管理 │ │ │ ├── Index.php//首頁儀表盤大數(shù)據大屏展示 │ │ │ ├── Lang.php//多語言管理 │ │ │ ├── Login.php//統(tǒng)一登錄服務 │ │ │ ├── Manager.php//超級管理員管理 │ │ │ ├── Menu.php//多菜單管理 │ │ │ ├── Theme.php//多模板管理 │ │ │ ├── Translation.php//翻譯管理 從谷歌、Bing、百度等源智能翻譯數(shù)據 │ │ │ └── User//多用戶管理 │ │ │ └── Index.php//列表 │ │ ├── hooks//用戶上傳動態(tài)組件列表 │ │ │ ├── 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//用戶上傳動態(tài)組件 │ │ │ │ ├── Index.php//事件 │ │ │ │ └── Module.php//組件 │ │ │ ├── Lang.php//多語言 │ │ │ ├── Manager.php//超級管理員 │ │ │ ├── Menu.php//菜單 │ │ │ ├── Theme.php//模板 │ │ │ ├── Translation.php//遠程智能翻譯 │ │ │ └── User//多用戶 │ │ │ └── Index.php//列表 │ │ ├── modules//應用列表 下面每1個文件夾都是1個應用,應用可以隨意在平臺間智能復制共享 │ │ │ ├── Api//【應用1】API服務 遵循RESTful規(guī)范 功能同上述 控制器 中目錄、文件介紹 一一對應 │ │ │ │ └── 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】訂單系統(tǒng) │ │ │ │ ├── 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實現(xiàn)) │ │ └── 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//系統(tǒng)常量 常駐內存(通過Yaconf實現(xiàn)) │ ├── admin_lang_1.ini//admin平臺中文語言包 │ ├── admin_product.ini//admin平臺生產配置【DB、常用正則、秘鑰...】 │ ├── admin_table.ini//admin平臺表結構單機緩存靜態(tài)化 │ ├── erp_lang_1.ini//erp平臺中文語言包 │ ├── erp_product.ini//erp平臺生產配置【DB、常用正則、秘鑰...】 │ ├── erp_table.ini//erp平臺表結構單機緩存靜態(tài)化 │ ├── paas_lang_1.ini//paas平臺中文語言包 │ ├── paas_product.ini//paas平臺生產配置【DB、常用正則、秘鑰...】 │ ├── paas_table.ini//paas平臺表結構單機緩存靜態(tài)化 │ └── pinyin.ini//平臺通用漢字轉拼音服務 ├── log//平臺日志(通過SeasLog實現(xiàn)) │ ├── default//常規(guī)日志 │ └── user//用戶行為日志 ├── public//系統(tǒng)單入口,下屬admin、erp、paas與上述app下屬文件夾一一對應,此處可以對應綁定域名 支持多域名配置 │ ├── admin//www.admin.com │ │ ├── assets//前端資源文件(通過Nginx UPS、Varnish 實現(xiàn)CDN、動靜分離 HTTP Cache) │ │ ├── index.php//單入口文件 │ │ ├── robots.txt//SEO蜘蛛爬取規(guī)則 │ │ └── sitemap.xml//站點地圖生成 優(yōu)化SEO │ ├── erp//www.erp.com │ │ ├── index.php │ │ ├── robots.txt │ │ └── sitemap.xml │ └── paas//www.paas.com │ ├── index.php │ ├── robots.txt │ └── sitemap.xml └── vendor//平臺公共類庫 ├── Hook//【類庫1】系統(tǒng)默認 │ ├── Batch//批量處理類 │ │ ├── Insert.php │ │ └── Process.php │ ├── Cache//全局單例、緩存類 │ │ └── Cache.php │ ├── Crypt//加密、解密類 │ │ ├── PassWord.php │ │ └── Rijndael.php │ ├── Data//大數(shù)據處理類 │ │ └── 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實現(xiàn)) │ │ └── 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
環(huán)境
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\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/ [email protected] 12345678
演示
業(yè)務
目前只集成
admin 中心管控統(tǒng)一后臺,目前重點開發(fā)中...
paas PAAS系統(tǒng)
erp ERP系統(tǒng)
每個域名綁定好平臺單入口,可以建設眾多平臺。
未來
目前HookPHP還未發(fā)布stable 0.1版本,雖然有眾多用戶焦急的催促等待我,但我心目中的stable 0.1版本至少應該可以達到:在線創(chuàng)建平臺、在線建模、在線生成MVC,初步達到AI在線編程,代碼生產代碼的可用版本。
當0.1 stable版本實現(xiàn)后,HookPHP基石應該初步落地,接下來開發(fā)天貓、亞馬遜這種多用戶商城0.1版。
以后,眾多第三方廠商(個人、組織、企業(yè))將會以提供HookPHP組件開發(fā)、模板開發(fā)、定制服務為榮,實現(xiàn) 開發(fā)者、用戶、HookPHP官方 等多方雙贏局面。
路 還很長,我 還很年輕,生命不息 戰(zhàn)斗不止 做點有意義的事情 加油!
