V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heguangyu5
V2EX  ›  PHP

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

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

    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

    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  
       345 天前
    如何解决:插件管理-应用插件功能里动态下载的 PHP 文件的问题呢?
    heguangyu5
        4
    heguangyu5  
    OP
       345 天前
    @Sligcm

    当然是改成动态下载编译好的.so,然后调用 `dl()` 加载进来.不过需要进一步完善一下当前的 dl()实现.
    这个方法只能安装插件,不能卸载.
    Sligcm
        5
    Sligcm  
       309 天前
    @heguangyu5 虽然不完美,略微有些麻烦,但必须给继续研究 PHP 的兄弟点个赞,加油!
    lhyannis
        6
    lhyannis  
       182 天前
    没说支持 thinkphp6
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   979 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:47 · PVG 03:47 · LAX 11:47 · JFK 14:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.