首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Webman TypePHP AOT 二进制构建插件

Webman TypePHP AOT 二进制构建插件

作者头像
Tinywan
发布于 2026-09-15 15:08:53
发布于 2026-09-15 15:08:53
1620
举报
文章被收录于专栏:开源技术小栈开源技术小栈

前言

长久以来,PHP 项目部署都绕不开一个前提:服务器必须预先安装PHP运行环境、配套扩展,再上传代码、安装 Composer 依赖。分发、源码保护、环境一致性一直是PHP服务落地的痛点。

TypePHP 作为Swoole团队推出的PHP AOT提前编译器,可以直接将PHP代码转译为C++代码,再编译为CPU原生机器码,产出独立可执行二进制文件,无需Zend虚拟机解释执行。但原生 TypePHP 对 Webman 这类常驻内存框架适配门槛很高,框架底层函数、协程组件、闭包参数校验等问题,会直接导致编译失败或者运行时崩溃。

tinywan/webman-typephp 插件应运而生,专门面向Webman 2.x,封装了TypePHP AOT 编译全流程,自动修复框架兼容问题,借助 Docker 构建环境,一键将 Webman 项目打包为 Linux 可直接分发的原生目录包。

什么是 tinywan/webman-typephp

tinywan/webman-typephp 是Webman生态的TypePHP AOT构建插件。插件会自动为Webman项目生成AOT入口文件与Linux编译配置,交由独立Docker Builder镜像完成编译,最终输出dist/发布目录。

开发者宿主机仅需要 PHP、Composer、Docker,不需要手动安装C++编译器、Clang、TypePHP编译工具链,大幅降低PHP原生二进制编译的上手成本。

核心原理:业务代码依旧使用PHP开发,无需大规模改写业务逻辑;插件自动处理框架底层代码补丁,交由TypePHP AOT编译为原生ELF二进制,无法编译的动态逻辑保留Zend兼容链路,混合运行。

🚀 快速上手

▪ 1. 安装插件

Webman项目根目录执行:

composer require tinywan/webman-typephp --dev

▪ 2. 环境预检

检查本地PHP版本、Docker服务是否就绪:

php webman typephp:doctor

▪ 3. 执行编译打包

# 默认打包,输出dist目录php webman typephp:package # 强制覆盖已存在dist目录,自动备份旧目录php webman typephp:package --force # 刷新main.php入口文件,旧入口自动备份php webman typephp:package --refresh-main # 指定自定义Docker构建镜像php webman typephp:package --image=tinywan/typephp-webman-builder:v0.1.0

▪ 4. 服务器部署启动

将dist目录上传至Linux x86_64/glibc服务器:

cd dist./start.sh start

支持Webman常规管理命令:

./start.sh start -d./start.sh status./start.sh stop./start.sh restart# 直接调用二进制包装脚本启动./webman-server start

📦 产物目录结构说明

dist/├── webman-server.bin     # TypePHP编译生成原生ELF二进制程序├── webman-server         # 启动包装脚本├── start.sh              # Workerman标准启停脚本├── libphp.so             # PHP核心运行时共享库├── libphpx.so            # PHPX运行时共享库├── php.ini               # 独立纯净PHP运行配置├── ext/                  # PHP扩展so文件├── lib/                  # 收集的底层系统依赖库├── runtime/              # 日志、缓存运行目录├── build-manifest.json   # 构建元信息,用于追溯├── config/               # 项目业务配置├── public/               # 静态资源└── app/view/             # 视图模板

说明:lib/目录携带编译所需全部动态依赖;glibc与系统加载器仍由目标服务器系统提供。

⚙️ 插件配置

配置文件:config/plugin/tinywan/typephp/app.php

return [    'enable' => true,    'docker' => [        'enabled' => true,        'image' => 'tinywan/typephp-webman-builder:v0.1.0',    ],    'build' => [        'output_name' => 'webman-server',        'dist_dir' => 'dist',        'clean_build' => true,    ],];

构建演示

检查构建环境 php webman typephp:doctor

PS D:\tinywan\typephp\webman> php webman typephp:doctor=== TypePHP Environment Diagnostic Tool ===• PHP Version: 8.5.10 [OK]• Docker: Docker version 29.7.2, build a7dcaa6 [OK - Required for Phase 1]• Host Clang Compiler: Not installed [OK - Handled inside Docker builder]

构建二进制 php webman typephp:package

D:\tinywan\typephp\webman> php webman typephp:package [TypePHP] Preparing build files for Webman project...[1/3] Verified AOT entrypoint: main.php[2/3] Generated compiler config: project.linux.yml[2/3] Generated flattened AOT sources: .typephp/build/helpers.php, .typephp/build/fast-route-functions.php[2/3] Generated nullable-static AOT sources: .typephp/build/coroutine-context.php, .typephp/build/coroutine-wait-group.php, .typephp/build/coroutine-barrier.php[2/3] Generated variadic-handler AOT sources: .typephp/build/workerman-worker.php, .typephp/build/workerman-tcp-connection.php, .typephp/build/workerman-async-tcp-connection.php, .typephp/build/workerman-select.php, .typephp/build/webman-file.php[3/3] Running TypePHP AOT compilation container (tinywan/typephp-webman-builder:v0.0.17)...Unable to find image 'tinywan/typephp-webman-builder:v0.0.17' locallyDigest: sha256:3d040e8135c92717167434858c23bbfad5cc5563dabd044e5318193cd85aa654Status: Downloaded newer image for tinywan/typephp-webman-builder:v0.0.17[INFO] Compiling Linux x86_64 glibc binary (job=8)...Initialized platform/backend: Linux + GCC (g++)[Scanning 12/51] app ...[Scanning 13/51] vendor/workerman/workerman/src ...[Scanning 14/51] vendor/workerman/webman-framework/src ...[Scanning 15/51] vendor/workerman/coroutine/src ...[Scanning 16/51] vendor/psr ...[Scanning 51/51] vendor/monolog/monolog/src/Monolog/Processor ...[Analyzing] Pre-checking native class declarations across 173 files...[Analyzing 1/173] 1% /native/20260907T074248Z-1/main.php[129/129] 100% native/20260907T074248Z-1/.typephp/build/fast-route-functions.ccSuccessfully compiled 129 filesg++ '@/native/20260907T074248Z-1/build/webman_server.rsp' -o '/native/20260907T074248Z-1/build/webman_server' -L'/opt/typephp/vendor/swoole/phpx/lib' -L'/usr/lib' -lphpx -lphp -lgmp -lgmpxx -lmpfr -lstdc++Build successful: /native/20260907T074248Z-1/build/webman_server[INFO] Copying PHP extensions from /usr/lib/php/20240924 to dist/ext/ ...cp: '/native/20260907T074248Z-1/.typephp/out-20260907T074248Z-1/lib/libphp.so' and '/native/20260907T074248Z-1/.typephp/out-20260907T074248Z-1/lib/libphp.so' are the same file[SUCCESS] Portable directory created: dist (run ./start.sh from it)🎉 Successfully built portable-dir: dist/webman-serverRun command: cd dist && ./start.sh start[post] Neutralized phar class constants in 1 config file(s): plugin/webman/console/app.php

📖 相关文档链接

●   TypePHP AOT官方文档:https://swoole.com/aot/zh

●   项目仓库:https://github.com/Tinywan/webman-typephp

●   问题反馈:https://github.com/Tinywan/webman-typephp/issues

●   TypePHP插件方案:TYPEPHP_PLUGIN_PROPOSAL.md

●   发布指南:RELEASING.md

总结

TypePHP AOT 为 PHP 打开了原生编译的新赛道,但直接落地 Webman 框架门槛极高。tinywan/webman-typephp插件补齐了 Webman框架适配短板,用Docker 屏蔽编译环境复杂性,让 Webman 开发者可以低成本体验 PHP AOT 原生二进制交付。

它不是万能方案,现阶段更适合对分发、源码保护、CPU 密集型业务有需求的场景;IO 密集型 Web 业务收益有限,并且 TypePHP 本身还在持续迭代。但毫无疑问,这是 Webman 生态在 PHP 原生编译方向上一次非常有价值的实践。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 前言
  • 什么是 tinywan/webman-typephp
  • 🚀 快速上手
    • ▪ 1. 安装插件
    • ▪ 2. 环境预检
    • ▪ 3. 执行编译打包
    • ▪ 4. 服务器部署启动
  • 📦 产物目录结构说明
  • ⚙️ 插件配置
  • 构建演示
  • 📖 相关文档链接
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档