tinywan/webman-typephp 是面向 Webman 2.x 的 TypePHP AOT 构建插件。它会从现有 Webman 项目生成 AOT 入口和 Linux 编译配置,再交给固定版本的 Docker builder 完成编译,最后整理出可以复制到目标服务器的 dist/ 目录。
宿主机只需要 PHP、Composer 和 Docker,不需要安装 C++、Clang 或 TypePHP 编译工具链。
在 Webman 项目根目录执行:
composer require tinywan/webman-typephp --dev
确认 PHP 版本、Docker CLI 和 Docker daemon 可用:
php webman typephp:doctor
# 默认输出到 dist/
php webman typephp:package
# dist/ 已存在时,显式确认覆盖
php webman typephp:package --force
# 强制使用最新 TypePHP stub 重置 main.php 入口(原有 main.php 会自动备份为 main.php.bak)
php webman typephp:package --refresh-main
默认 builder 为 tinywan/typephp-webman-builder:v0.0.17。编译在 Docker 中完成,宿主机不需要 C++、Clang 或 TypePHP 编译器。
将 dist/ 复制到兼容的 Linux x86_64/glibc 服务器,在目录内启动:
cd dist
./start.sh start
start.sh 会自动指定 PHPRC 加载随包的 php.ini,并将随包发布的 lib/ 加入动态库搜索路径。也支持 Webman 常用命令:
./start.sh start -d
./start.sh status
./start.sh stop
./start.sh restart
也可以直接通过包装脚本启动:
./webman-server start
成功构建后的完整目录结构如下(与全静态便携环境 100% 对齐):
dist/
├── webman-server.bin # TypePHP 生成的 ELF 原生二进制
├── webman-server # 启动包装脚本(自动载入 php.ini 与底层动态库)
├── start.sh # 标准 Workerman 启动脚本
├── libphp.so # PHP 核心运行时共享库
├── libphpx.so # PHPX 运行时共享库
├── php.ini # 自包含纯净 PHP 运行时配置
├── ext/ # 随包分发的 PHP 核心与网络扩展模块 (.so)
├── lib/ # 随包发布的底层系统与扩展动态依赖库 (ldd 完整收集)
├── runtime/ # 运行时缓存与日志目录 (logs, views)
├── build-manifest.json # 输入、镜像与时间等构建元数据
├── config/ # 项目运行时配置(若存在)
├── public/ # 静态资源(若存在)
└── app/view/ # 视图模板(若存在)
lib/ 携带构建及扩展所需的所有动态依赖库;glibc、动态加载器由目标系统提供。build-manifest.json 用于追踪构建,不应写入密钥、令牌或其他敏感信息。
| 命令 | 说明 |
|---|---|
php webman typephp:package |
使用默认 builder 构建 Linux portable-dir |
php webman typephp:package --force |
覆盖已有输出,并保留旧目录备份 |
php webman typephp:package --refresh-main |
强制从最新官方 stub 刷新 main.php(旧文件自动备份) |
php webman typephp:package --image=... |
使用指定且经过验证的 Docker 镜像 |
php webman typephp:doctor |
检查 PHP、Docker 和构建前置条件 |
php webman typephp:init-ci |
生成 Linux amd64 GitHub Actions 工作流 |
安装插件后,配置文件位于 config/plugin/tinywan/typephp/app.php:
return [
'enable' => true,
'docker' => [
'enabled' => true,
'image' => 'tinywan/typephp-webman-builder:v0.0.17',
],
'build' => [
'output_name' => 'webman-server',
'dist_dir' => 'dist',
'clean_build' => true,
],
];
D:\dnmp\www\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' locally
Digest: sha256:3d040e8135c92717167434858c23bbfad5cc5563dabd044e5318193cd85aa654
Status: 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.cc
Successfully compiled 129 files
g++ '@/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-server
Run command: cd dist && ./start.sh start
[post] Neutralized phar class constants in 1 config file(s): plugin/webman/console/app.php
https://hub.docker.com/repository/docker/tinywan/typephp-webman-builder/tags/v0.1.0/sha256-4323d8252381813542044542cebca34a59eeee6ba9f9fcfbb16744063e14639f
如果可以支持到win端就更好了
win端你可以使用基础镜像自己编译
7.4-8.0 webman1.x的老项目支不支持
面向 Webman 2.x 的
composer create-project workerman/webman:~2.0webman/consolewebman/databasewebman/rediswebman/validationcomposer require tinywan/webman-typephp --devphp webman typephp:doctor=== TypePHP Environment Diagnostic Tool ===
• PHP Version: 8.4.14 [OK]
• Docker: Docker version 29.5.3, build d1c06ef [OK - Required for Phase 1]
• Host Clang Compiler: Not installed [OK - Handled inside Docker builder]
php webman typephp:package执行报错[Analyzing 6/197] 4% /native/20260914T044842Z-1/.typephp/build/coroutine-barrier.php
prepare: .typephp/build/coroutine-barrier.php
Fatal error: References are only supported for int, string, float, bool, array, mixed, or union types in /native/20260914T044842Z-1/.typephp/build/coroutine-barrier.php:52
安装后代码不编辑直接打包.
workerman/webman-framework为2.2.4
是有版本要求吗?还是哪里使用不对..
tinywan/typephp-webman-builder:v0.1.0 可以打包但运行报错
/e/work/exterior/webman/dist/webman-server: line 9: /e/work/exterior/webman/dist/webman-server.bin: cannot execute binary file: Exec format error
/e/work/exterior/webman/dist/webman-server: line 9: exec: /e/work/exterior/webman/dist/webman-server.bin: cannot execute: Permission denied
/usr/bin/bash: Exit 126.
tinywan/typephp-webman-builder:v0.1.3与latest 打包均报错.
你这是提示没有权限
v0.1.3的还是v0.1.0的?两者都是cmd的管理员权限下执行的命令.理论上应该是没权限问题的..明天试试在wsl里做一次上述动作
wsl 我搞了一天了,环境没问题,就是遇到我提问的问题了
[Analyzing 6/218] 3% /native/20260914T094759Z-1/.typephp/build/coroutine-barrier.php
prepare: .typephp/build/coroutine-barrier.php
Fatal error: References are only supported for int, string, float, bool, array, mixed, or union types in /native/20260914T094759Z-1/.typephp/build/coroutine-barrier.php:52
这个是什么问题呢
是不是builder用的docker镜像是0.1.3版本?我也是这个问题.
报错的核心原因是:TypePHP 不支持对“具体对象类型”使用引用操作符 &。根据 TypePHP 的编译规则,引用传递(如 &$var)仅被允许用于基础标量(int, string, float, bool)、array、mixed 或联合类型。
foreach ($data['data'] as &$v){} 像这样的是不行的是吧
可以
wsl的Ubuntu 26.04 LTS,所有安装代码均为composer原始安装未做调整.
让AI给你改,我也是这个问题,让AI修改下就好了,已经编译好了,还是带项目的,不是一个空的框架
我只是研究学习下,如果纯安装不做任何代码操作的情形下编译都不过的情况下走不通,这对推广是极为不利的.如果纯空下还要改那就是需要对框架做fix了
将config/plugin/tinywan/typephp/app.php中'image' => 'tinywan/typephp-webman-builder:v0.1.0',手动改成0.1.0后成功编译.进入dist目录执行

sudo ./start.sh start报错.纯兴趣讨论无其它意思.若叨扰不喜请无视即可.(^-^)~
我也遇到这个问题
这个扩展发布的第一天看到的公文就拿自己练手的项目试了下就报的这个错,以为是业务代码问题就没去看.今天刚好空了弄了一个纯空项目去测试也是这个错误提示,纯粹就是好奇心驱使,哈哈哈
依然不行喔,只能等框架本体更新啦.tinywan/typephp-webman-builder:v0.1.4 | workerman/webman-framework dev-master f908cac .坐等下次体验啦.加油