PHP 编译器 BPC 7.1 发布,成功编译 webman-admin - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heguangyu5
V2EX    PHP

PHP 编译器 BPC 7.1 发布,成功编译 webman-admin

  •  
  •   heguangyu5 2023-12-27 17:09:30 +08:00 2202 次点击
    这是一个创建于 709 天前的主题,其中的信息可能已经有所发展或是发生改变。

    BPC 是一个 PHP Native Compiler,可以将 PHP 源码最终转译成 C 语言,然后编译成动态链接库或可执行程序.

    BPC 还内置软件授权机制,最终可实现源码保护、软件授权、二进制打包三合一!

    彻底解决 PHP 项目的交付问题.

    How BPC Works

    1. 官网 bpc.dev
    2. 安装使用文档
    3. Try BPC with Docker
    4. Run BPC Compiled Program with Docker
    5. BPC 编译入门示例: Tiny File Manager

    重要的事情放在开头加粗说三遍

    目前 BPC 编译的 webman-admin 及其依赖 doctrine- illuminate- symfony- carbon webman- intervention- 不一定完整且未经完善测试,当前仅是可行性验证,切勿用于生产环境!

    目前 BPC 编译的 webman-admin 及其依赖 doctrine- illuminate- symfony- carbon webman- intervention- 不一定完整且未经完善测试,当前仅是可行性验证,切勿用于生产环境!

    目前 BPC 编译的 webman-admin 及其依赖 doctrine- illuminate- symfony- carbon webman- intervention- 不一定完整且未经完善测试,当前仅是可行性验证,切勿用于生产环境!

    0. 前置说明

    本文所述的所有操作都是在 Ubuntu 18.04 amd64 上完成的,但这并不是说 BPC 只能在 Ubuntu 18.04 上运行.

    BPC 编译器自身已验证过可以在 Ubuntu 18.04 / 20. 04 / 22.04 上运行,编译结果还可以在 Debian 12 上运行, 参看 wordpress 的例子.

    1. 快速体验二进制版的 webman-admin

    1. 创建一个临时目录 /tmp/x

    2. 下载编译好的二进制文件 start-webman-admin.gz/tmp/x/

    3. 解压并加上可执行权限 gunzip start-webman-admin.gz && chmod +x start-webman-admin

    4. 运行 WEBMAN_PLUGINS_WITH_COnFIG=admin ./start-webman-admin start

      注意要加上环境变量 WEBMAN_PLUGINS_WITH_COnFIG=admin

    5. 另外打开一个终端

      ~$ tree /tmp/x/ /tmp/x/ ├── runtime │ ├── logs │ │ └── workerman.log │ ├── views │ └── webman.pid └── start-webman-admin 3 directories, 3 files 
    6. 访问 http://localhost:8787/app/admin 完成安装,最后点击"进入后台"来到登录界面并登录.

    7. 再次执行一下 tree 命令

      ~$ tree /tmp/x/ /tmp/x/ ├── plugin-admin-config-database.json ├── runtime │ ├── login │ ├── logs │ │ └── workerman.log │ ├── sessions │ │ └── session_90bbb4525e57d9419be84de48e0ef76f │ ├── views │ └── webman.pid └── start-webman-admin 5 directories, 5 files 

      可以看到多了两个文件,一个是 session_xxxx , 另一个是 plugin-admin-config-database.json.

      BPC 最终将 PHP 代码转译成了 C 语言, start-webman-admin 的运行是不需要 PHP 环境的,也无法执行 php 代码,因此数据库配置信息我们存储到了 json 文件中, plugin/admin/config/database.php 会读取这个 json 文件.

    8. 点一点后台的各项功能试试吧!

      插件管理-应用插件 是没有编译进来的,点这个菜单会报 /app/admin/plugin/index not found.

      原因同上,下载回来 php 代码是没有用的.

    2. 亲自动手编译 start-webman-admin

    2.1 - 2.3.1 可以参看文章 PHP 编译器 BPC6.4 发布,成功编译 webman,二进制打包源码保护软件授权 All in One! 及视频

    1. [ PHP 编译器 BPC 的安装和基本使用] https://www.bilibili.com/video/BV1b34y1u7as/?share_source=copy_web&vd_source=fb7701afa4e3c4faaffabbe49ab11ac2
    2. [使用 PHP 编译器 BPC 来编译 workerman 和 GatewayWorker ] https://www.bilibili.com/video/BV1Wy4y1w7HG/?share_source=copy_web&vd_source=fb7701afa4e3c4faaffabbe49ab11ac2
    3. [使用 PHP 编译器 BPC 来编译 webman ] https://www.bilibili.com/video/BV12N411x7ho/?share_source=copy_web&vd_source=fb7701afa4e3c4faaffabbe49ab11ac2

    2.1 参看文档下载安装 BPC

    2.2 下载安装 phptobpc 来解决 BPC 不支持的语法特性

    2.3 编译安装 webman 依赖

    参照对应 git repo README.md 开头的 BPC Notes 依次执行 make make install 即可.

    2.3.1 webman 依赖梳理第 1 部分

    webman-without-LaravelDb 1. psr-log 2. psr-container 3. nikic-fast-route 4. monolog 5. workerman 6. webman-framework 

    1- psr-log-1.1.4

    2- psr-container-2.0.1

    3- nikic-fast-route-1.3.0

    4- monolog-2.x-branch

    5- workerman-4.1-branch

    6- ~~[webman-framework]( https://github.com/heguangyu5/bpc-webman-framework)~~ 先不要编译这个

    2.3.2 webman 依赖梳理第 2 部分: 加上 LaravelDb

    # Illuminate/Database 依赖 Carbon,Carbon 又依赖 Symfony 的几个 package 7. symfony-polyfill-php80 8. symfony-translation-contracts 9. symfony-translation 10. carbon # Illuminate/Database 还依赖 doctrine-inflector 及 Illuminate 的其它几个 package 11. doctrine-inflector 12. illuminate-contracts 13. illuminate-container 14. illuminate-support 15. illuminate-events 16. illuminate-pagination # 最后编译 Illuminate/Database 17. illuminate-database 

    7- symfony-polyfill-php80

    8- symfony-translation-contracts-2.5-branch

    9- symfony-translation-5.0-branch

    10- carbon

    11- doctrine-inflector-2.0.x-branch

    12- illuminate-contracts-7.x-branch

    13- illuminate-container-7.x-branch

    14- illuminate-support-7.x-branch

    15- illuminate-events-7.x-branch

    16- illuminate-pagination-7.x-branch

    17- illuminate-database-7.x-branch

    2.3.3 webman-framework

    Illuminate/Database 编译好后,就可以编译 webman-framework 了.

    6- webman-framework

    2.4 编译 webman-admin

    同上, 参照对应 git repo README.md 开头的 BPC Notes 依次执行 make make install 即可.

    webman-admin 依赖 webman-captcha 和 intervention-image.

    18- webman-captcha/p>

    19- intervention-image-2.7-branch

    20- webman-admin

    2.5 编译运行 start-webman-admin

    以上 20 个 package 编译安装完成后, 就可以编译 start-webman-admin 了.

    ~$ git clone [email protected]:heguangyu5/bpc-webman.git ~$ cd bpc-webman/ ~/bpc-webman$ make start-webman-admin output prologue generate main.c generate build.ninja run ninja [35/35] link ../start-webman-admin (statically linked) mv start-webman-admin ../ make[1]: Leaving directory '~/bpc-webman/build' ~/bpc-webman$ mkdir /tmp/x ~/bpc-webman$ mv start-webman-admin /tmp/x/ ~/bpc-webman$ cd /tmp/x/ /tmp/x$ WEBMAN_PLUGINS_WITH_COnFIG=admin ./start-webman-admin start Workerman[./start-webman-admin] start in DEBUG mode --------------------------------------------- WORKERMAN ---------------------------------------------- Workerman version:4.1.10 PHP version:7.2.19-bpc Event-Loop:\Workerman\Events\Event ---------------------------------------------- WORKERS ----------------------------------------------- proto user worker listen processes status tcp hgy webman http://0.0.0.0:8787 32 [OK] ------------------------------------------------------------------------------------------------------ Press Ctrl+C to stop. Start success. 
    6 条回复    2024-06-28 17:53:48 +08:00
    aogg
        1
    aogg  
       2023-12-28 08:57:46 +08:00
    没说支持 laravel
    heguangyu5
        2
    heguangyu5  
    OP
       2023-12-28 09:11:55 +08:00
    @aogg laravel 东西太多了,我在编译 Illuminate/Database 的过程中领教了一下,我自己就不搞了,有需要的人自己编译吧.
    Sligcm
        3
    Sligcm  
       2024-01-17 11:00:35 +08:00
    如何解决:插件管理-应用插件功能里动态下载的 PHP 文件的问题呢?
    heguangyu5
        4
    heguangyu5  
    OP
       2024-01-17 11:31:37 +08:00
    @Sligcm

    当然是改成动态下载编译好的.so,然后调用 `dl()` 加载进来.不过需要进一步完善一下当前的 dl()实现.
    这个方法只能安装插件,不能卸载.
    Sligcm
        5
    Sligcm  
       2024-02-22 10:41:53 +08:00
    @heguangyu5 虽然不完美,略微有些麻烦,但必须给继续研究 PHP 的兄弟点个赞,加油!
    lhyannis
        6
    lhyannis  
       2024-06-28 17:53:48 +08:00
    没说支持 thinkphp6
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2355 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:41 PVG 23:41 LAX 07:41 JFK 10:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86