编程 Swoole AOT:PHP Windows 原生应用编译器

2026-05-21 16:19:34 +0800 CST views 13

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

复制全文 生成海报 开源项目 PHP Swoole AOT Windows

推荐文章

go发送邮件代码
2024-11-18 18:30:31 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
Nginx 负载均衡
2024-11-19 10:03:14 +0800 CST
支付宝批量转账
2024-11-18 20:26:17 +0800 CST
java MySQL如何获取唯一订单编号?
2024-11-18 18:51:44 +0800 CST
使用 Vue3 和 Axios 实现 CRUD 操作
2024-11-19 01:57:50 +0800 CST
Go中使用依赖注入的实用技巧
2024-11-19 00:24:20 +0800 CST
Vue 3 中的 Watch 实现及最佳实践
2024-11-18 22:18:40 +0800 CST
一键配置本地yum源
2024-11-18 14:45:15 +0800 CST
Python设计模式之工厂模式详解
2024-11-19 09:36:23 +0800 CST
程序员出海搞钱工具库
2024-11-18 22:16:19 +0800 CST
Vue3结合Driver.js实现新手指引功能
2024-11-19 08:46:50 +0800 CST
程序员茄子在线接单