• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liqinliqin
58.52D
V2EX  ›  程序员

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

  •  
  •   liqinliqin ·
    PRO
    ·
    smartarduino · Sep 19, 2025 · 4684 views
    This topic created in 414 days ago, the information mentioned may be changed or developed.
    预计元旦前发布,各位
    Supplement 1  ·  Sep 19, 2025
    实际上现在搞的 AOT 实现,是可降级的,是函数级别的,会把一部分 PHP 函数给转成 C++ 函数,遇到混杂 PHP 和 HTML 的模版文件,或者不支持的语法,就还是走 opcode 了,和 swoole compiler 这个是一起运行的
    33 replies  •  2026-04-22 18:10:44 +08:00
    FarAhead
    FarAhead
    Sep 19, 2025
    1
    这个标题好,比很多新闻专业的的都专业
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    2
    @w7938940 #1 见笑了,发自内心喜欢 PHP,一分钟上手开始编程
    hanguofu
    hanguofu
    Sep 19, 2025
    3
    能不能根据用户挑选的商品自动计算出总体积和总重量 ?
    jimzaizheli
    jimzaizheli
    Sep 19, 2025
    4
    666
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    5
    php 这个最适合 Linux C 程序员了,写扩展、写库,不用面向对象,就面向 Money
    cmos
    cmos
    Sep 19, 2025
    6
    WordPress 里面有大量的 do_action('xxx'),还有主题文件动态 include 。这些在编译期,没办法做到静态分析完整调用图,怎么 AOT ?更进一步,Zend Engine 怎么办?有这些钱,还不如找人用 Golang 重写 WordPress 。。。
    xtreme1
    xtreme1
    Sep 19, 2025❤️1
    7
    先不谈具体如何搞, 你都 AOT 了还怎么"拷贝到任何地方直接运行"...
    我看了 php 现在貌似还没支持 musl
    diudiuu
    diudiuu
    Sep 19, 2025
    8
    不会跟 python 打包一样吧
    javalaw2010
    javalaw2010
    Sep 19, 2025
    9
    不是很看好。要解决的实际问题很多,光是 php 版本和 php 扩展就够喝一壶的了,另外还得考虑现有的框架兼容,比如 laravel: php artisan xxxx 的用法,怎么兼容进去。
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    10
    @imes #6 这个就拿 WordPress 练了,到时发布版本,您直接用一下
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    11
    @canteon #8 不是,这个是真正生成二进制,和打包两个概念
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    12
    @javalaw2010 #9 一定要把这个搞定
    celaraze
    celaraze
    Sep 19, 2025
    13
    我好几年前就用 frankenphp 搞过,这也是 swoole 的大招?
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    14
    @celaraze #13 你是如何做的
    celaraze
    celaraze
    Sep 19, 2025
    15
    @liqinliqin https://frankenphp.dev/cn/docs/static/ 你看一下,我刚翻了我的开源项目 commit 历史,我至少 2 年前就这么干了,一直都是./run 执行我的 php web 项目。
    querysecret
    querysecret
    Sep 19, 2025
    16
    太好了,如果真能出我转 php
    zone10
    zone10
    Sep 19, 2025
    17
    直接用 Go 不香吗, glibc 都不依赖, 部署方面无人出其右
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    18
    @celaraze #13 有办法处理,实际上现在搞的 AOT 实现,是可降级的,是函数级别的,会把一部分 PHP 函数给转成 C++ 函数,遇到混杂 PHP 和 HTML 的模版文件,或者不支持的语法,就还是走 opcode 了,和 swoole compiler 这个是一起运行的
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    19
    @zone10 #17 就是喜欢 php ,不需要理由的喜欢
    kakki
    kakki
    Sep 19, 2025
    20
    用 php 不就图省事么,直接 ftp 传上去就行,常驻内存还真不如用 go
    Yanlongli
    Yanlongli
    Sep 19, 2025
    21
    额,是不是将整个 php 环境打包、然后将代码打包、再将浏览器打包、然后 润
    liqinliqin
    liqinliqin
    OP
    PRO
    Sep 19, 2025
    22
    实际上现在搞的 AOT 实现,是可降级的,是函数级别的,会把一部分 PHP 函数给转成 C++ 函数,遇到混杂 PHP 和 HTML 的模版文件,或者不支持的语法,就还是走 opcode 了,和 swoole compiler 这个是一起运行的
    back0893
    back0893
    Sep 19, 2025
    23
    有点鸡肋
    不如原来 php ,可以直接修改代码
    打包不如换语言
    容器化不好么?
    hronro
    hronro
    Sep 19, 2025
    24
    按我的理解,JS/PHP/Python/Ruby 这类动态语言,必须要依赖 JIT 才能有可以看的性能,不然性能上就要慢 2 个数量级。要搞 AOT ,除非能支持 PBO ,不然性能能看么?
    hronro
    hronro
    Sep 19, 2025
    26
    @xgdgsc 谢谢补充。但 Julia 还是和 PHP 这种古早的动态语言不太一样吧,没有可比性。
    CodeCodeStudy
    CodeCodeStudy
    Sep 19, 2025
    27
    Java 的 GraalVM 的 native-image ,还是需要通过 java -agentlib:native-image-agent=config-merge-dir=/path/to/config-dir/将所有的代码跑一遍,收集运行中的反射、序列化、动态代理、资源等信息,然后再进行 native-image 的 AOT 编译。好奇 PHP 是怎么处理动态特性的?
    CodeCodeStudy
    CodeCodeStudy
    Sep 19, 2025
    28
    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/
    phreej
    phreej
    Sep 19, 2025
    29
    编译打包功能嘿,webman 框架早就支持了!!!
    changz
    changz
    Sep 20, 2025 via Android
    30
    生态才是最大的问题,举个例子,你能让 rocketmq 给你 swoole 写个 sdk 么
    julyclyde
    julyclyde
    Sep 20, 2025
    31
    感觉 swoole 这个名字之下好像产品已经变了好几次了?
    cat1879
    cat1879
    Sep 21, 2025
    32
    打包后还能反编译吗?另外运行的环境是怎么样的
    CodeCodeStudy
    33
    https://mp.weixin.qq.com/s/05I3xe4pgRJufSBG-8Gz6w
    2026 年 4 月 22 日,Swoole 团队发布了 PHP 的 AOT
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   659 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 21:35 · PVG 05:35 · LAX 13:35 · JFK 16:35
    ♥ Do have faith in what you're doing.