Swoole 正在准备一个大招 PHP AOT,让任意 PHP 代码直接生成二进制,比如 WordPress ,直接一个命令行 aot ./wordpress -o wd 生成二进制,可以拷贝到任何地方直接./wd 运行 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
liqinliqin
58.51D
V2EX    程序员

Swoole 正在准备一个大招 PHP AOT,让任意 PHP 代码直接生成二进制,比如 WordPress ,直接一个命令行 aot ./wordpress -o wd 生成二进制,可以拷贝到任何地方直接./wd 运行

  •  
  •   liqinliqin
    PRO
    smartarduino 20 天前 2935 次点击
    预计元旦前发布,各位
    第 1 条附言    20 天前
    实际上现在搞的 AOT 实现,是可降级的,是函数级别的,会把一部分 PHP 函数给转成 C++ 函数,遇到混杂 PHP 和 HTML 的模版文件,或者不支持的语法,就还是走 opcode 了,和 swoole compiler 这个是一起运行的
    32 条回复    2025-09-21 20:20:08 +08:00
    FarAhead
        1
    FarAhead  
       20 天前
    这个标题好,比很多新闻专业的的都专业
    liqinliqin
        2
    liqinliqin  
    OP
    PRO
       20 天前
    @w7938940 #1 见笑了,发自内心喜欢 PHP,一分钟上手开始编程
    hanguofu
        3
    hanguofu  
       20 天前
    能不能根据用户挑选的商品自动计算出总体积和总重量 ?
    jimzaizheli
        4
    jimzaizheli  
       20 天前
    666
    liqinliqin
        5
    liqinliqin  
    OP
    PRO
       20 天前
    php 这个最适合 Linux C 程序员了,写扩展、写库,不用面向对象,就面向 Money
    cmos
        6
    cmos  
       20 天前
    WordPress 里面有大量的 do_action('xxx'),还有主题文件动态 include 。这些在编译期,没办法做到静态分析完整调用图,怎么 AOT ?更进一步,Zend Engine 怎么办?有这些钱,还不如找人用 Golang 重写 WordPress 。。。
    xtreme1
        7
    xtreme1  
       20 天前   1
    先不谈具体如何搞, 你都 AOT 了还怎么"拷贝到任何地方直接运行"...
    我看了 php 现在貌似还没支持 musl
    canteon
        8
    canteon  
       20 天前
    不会跟 python 打包一样吧
    javalaw2010
        9
    javalaw2010  
       20 天前
    不是很看好。要解决的实际问题很多,光是 php 版本和 php 扩展就够喝一壶的了,另外还得考虑现有的框架兼容,比如 laravel: php artisan xxxx 的用法,怎么兼容进去。
    liqinliqin
        10
    liqinliqin  
    OP
    PRO
       20 天前
    @imes #6 这个就拿 WordPress 练了,到时发布版本,您直接用一下
    liqinliqin
        11
    liqinliqin  
    OP
    PRO
       20 天前
    @canteon #8 不是,这个是真正生成二进制,和打包两个概念
    liqinliqin
        12
    liqinliqin  
    OP
    PRO
       20 天前
    @javalaw2010 #9 一定要把这个搞定
    celaraze
        13
    celaraze  
       20 天前
    我好几年前就用 frankenphp 搞过,这也是 swoole 的大招?
    liqinliqin
        14
    liqinliqin  
    OP
    PRO
       20 天前
    @celaraze #13 你是如何做的
    celaraze
        15
    celaraze  
       20 天前
    @liqinliqin https://frankenphp.dev/cn/docs/static/ 你看一下,我刚翻了我的开源项目 commit 历史,我至少 2 年前就这么干了,一直都是./run 执行我的 php web 项目。
    querysecret
        16
    querysecret  
       20 天前
    太好了,如果真能出我转 php
    zone10
        17
    zone10  
       20 天前
    直接用 Go 不香吗, glibc 都不依赖, 部署方面无人出其右
    liqinliqin
        18
    liqinliqin  
    OP
    PRO
       20 天前
    @celaraze #13 有办法处理,实际上现在搞的 AOT 实现,是可降级的,是函数级别的,会把一部分 PHP 函数给转成 C++ 函数,遇到混杂 PHP 和 HTML 的模版文件,或者不支持的语法,就还是走 opcode 了,和 swoole compiler 这个是一起运行的
    liqinliqin
        19
    liqinliqin  
    OP
    PRO
       20 天前
    @zone10 #17 就是喜欢 php ,不需要理由的喜欢
    kakki
        20
    kakki  
       20 天前
    用 php 不就图省事么,直接 ftp 传上去就行,常驻内存还真不如用 go
    Yanlongli
        21
    Yanlongli  
       20 天前
    额,是不是将整个 php 环境打包、然后将代码打包、再将浏览器打包、然后 润
    liqinliqin
        22
    liqinliqin  
    OP
    PRO
       20 天前
    实际上现在搞的 AOT 实现,是可降级的,是函数级别的,会把一部分 PHP 函数给转成 C++ 函数,遇到混杂 PHP 和 HTML 的模版文件,或者不支持的语法,就还是走 opcode 了,和 swoole compiler 这个是一起运行的
    back0893
        23
    back0893  
       20 天前
    有点鸡肋
    不如原来 php ,可以直接修改代码
    打包不如换语言
    容器化不好么?
    hronro
        24
    hronro  
       20 天前
    按我的理解,JS/PHP/Python/Ruby 这类动态语言,必须要依赖 JIT 才能有可以看的性能,不然性能上就要慢 2 个数量级。要搞 AOT ,除非能支持 PBO ,不然性能能看么?
    hronro
        26
    hronro  
       20 天前
    @xgdgsc 谢谢补充。但 Julia 还是和 PHP 这种古早的动态语言不太一样吧,没有可比性。
    CodeCodeStudy
        27
    CodeCodeStudy  
       20 天前
    Java 的 GraalVM 的 native-image ,还是需要通过 java -agentlib:native-image-agent=config-merge-dir=/path/to/config-dir/将所有的代码跑一遍,收集运行中的反射、序列化、动态代理、资源等信息,然后再进行 native-image 的 AOT 编译。好奇 PHP 是怎么处理动态特性的?
    CodeCodeStudy
        28
    CodeCodeStudy  
       20 天前
    public class Main {

    public static void main(String[] args) {
    try {
    String className = "java.util.Collections";
    Class<?> cl = Class.forName(className);
    System.out.println(cl.getName());
    } catch (Exception e) {
    e.printStackTrace();
    }

    try {
    long time = System.currentTimeMillis() / 1000L;
    String className = time % 2 == 0 ? "java.util.Base64" : "java.util.Timer";
    Class<?> cl = Class.forName(className);
    System.out.println(cl.getName());
    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    }

    javac Main.java && native-image Main && ./main

    输出
    java.util.Collections
    java.lang.ClassNotFoundException: java.util.Base64
    或者
    java.util.Collections
    java.lang.ClassNotFoundException: java.util.Timer

    需要用到 java -agentlib:native-image-agent=config-merge-dir=./src/main/resources/META-INF/native-image Main 将动态特性收集起来,这里的 java 是指 GraalVM 的 jdk ,然后再 native-image 编译

    https://www.graalvm.org/latest/reference-manual/native-image/guides/use-reachability-metadata-repository-maven/

    https://www.graalvm.org/latest/reference-manual/native-image/metadata/AutomaticMetadataCollection/
    phreej2voo
        29
    phreej2voo  
       20 天前
    编译打包功能嘿,webman 框架早就支持了!!!
    changz
        30
    changz  
       20 天前 via Android
    生态才是最大的问题,举个例子,你能让 rocketmq 给你 swoole 写个 sdk 么
    julyclyde
        31
    julyclyde  
       19 天前
    感觉 swoole 这个名字之下好像产品已经变了好几次了?
    cat1879
        32
    cat1879  
       18 天前
    打包后还能反编译吗?另外运行的环境是怎么样的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1074 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:47 PVG 01:47 LAX 10:47 JFK 13:47
    Do have faith in what you're doing.
    ubao 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