Swoole AOT:PHP Windows 原生应用编译器
标签: 开源项目 / PHP / Swoole / AOT / Windows
原文: 微信公众号「开源技术小栈」https://mp.weixin.qq.com/s/TuojDjlpNPwTTPOtVHXhIw
项目: Swoole-Compiler v4 (Native AOT)
核心亮点
Swoole-Compiler v4 推出 Native AOT(Ahead-of-Time)编译器,能将 PHP 代码直接编译为原生二进制可执行文件,性能相比传统 PHP 解释器提升可达 150 倍,达到与 Rust、Golang 相当的水平。
核心特点
| 特点 | 说明 |
|---|---|
| 直接生成机器指令 | 非 opcode,真正的原生二进制 |
| ZendPHP 底层库兼容 | ABI 互通,可复用现有 PHP 生态 |
| 不依赖 ZendVM 执行器 | 编译后脱离 PHP 运行时 |
与 HHVM、KPHP 不同,Swoole AOT 不是 PHP 的另一种实现。它使用 ZendPHP 底层库 + PHPX 兼容层,直接将 PHP 代码编译为 C++ 风格的机器指令。
准备环境
1. 安装 Visual Studio 2022(VS17)
下载社区版:https://visualstudio.microsoft.com/zh-hans/vs/community/
必须勾选:「使用 C++ 的桌面开发」
2. 下载 Swoole-Compiler-Windows
下载地址:https://github.com/swoole/aot-compiler/releases
解压到推荐路径,例如:D:\workspace\swoole-compiler-windows-x64
3. 配置环境变量
PHP_HOME=D:\workspace\swoole-compiler-windows-x64
PHPX_HOME=D:\workspace\swoole-compiler-windows-x64\phpx
# 将以下路径添加到 Path
D:\workspace\swoole-compiler-windows-x64
提示:软件包内已包含完整 PHP 8.4 ZTS,可通过
php.ini加载扩展。
编译 PHP 程序
示例代码 hello.php
<?php
declare(strict_types=1);
function main(): void
{
echo "Hello Tinywan " . PHP_EOL;
var_dump(PHP_VERSION);
var_dump(php_uname());
global $argv;
var_dump($argv);
}
main();
编译命令
cd D:\workspace\swoole-compiler-windows-x64
.\swoole_compiler.exe .\hello.php
正常输出
Initialized platform/backend: Windows + MSVC (cl)
prepare: hello.php
prepare completed: 1 source files in total
convert: hello.php
generate arginfo file: hello.php
Starting compilation for 5 files
cl /c "D:\workspace\swoole-compiler-windows-x64/build\\hello.cc"
hello.cc
...
Build successful: hello.exe
编译成功后会生成 hello.exe(不包含 PHP 源码,直接是机器指令)。
执行
D:\workspace\swoole-compiler-windows-x64>.\hello.exe
Hello Tinywan
string(6) "8.4.20"
string(51) "Windows NT TINYWAN 6.2 build 9200 (Windows 8) AMD64"
array(1) {
[0]=>
string(11) ".\hello.exe"
}
常见报错及解决
错误现象
Fatal error: compile failed: D:\...\build\\hello.cc
#0 [internal function]: PhpAot\Php\Translator->compile(Array)
解决方法
在编译前先初始化 Visual Studio 命令行环境:
# 进入 swoole-compiler 目录
cd D:\workspace\swoole-compiler-windows-x64
# 执行 vcvars(路径根据你的 VS 安装版本调整)
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2026 Developer Command Prompt v18.6.0
** Copyright (c) 2026 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
然后再执行编译命令:
.\swoole_compiler.exe .\hello.php
注意事项
- 必须安装 VS2022 C++ 桌面开发组件,否则无法编译
- 路径中避免中文和特殊字符
- 首次编译会生成中间文件(
.cc等),后续修改 PHP 代码后需重新编译 - 当前为商业软件,具体授权以官网为准
- 支持生成可执行文件和动态库,适用于桌面工具、CLI 程序等场景
写在最后
Swoole AOT 让 PHP 从「解释执行」跨越到「原生编译」,性能提升 150 倍不是噱头。
对于:
- 需要保护源码的 PHP 项目
- 希望提升性能的 CLI 工具
- 想用 PHP 写 Windows 桌面程序的开发者
这是一个值得尝试的方向。
本文整理自微信公众号「开源技术小栈」,原文链接:https://mp.weixin.qq.com/s/TuojDjlpNPwTTPOtVHXhIw