PHP无法真正编译为原生Windows .exe,所有工具均为打包+内嵌解释器;ExeOutput适合桌面Web应用分发,Bambalam适合命令行脚本打包。

.exe,所有所谓“转 EXE”的工具,本质都是**打包 + 内嵌 PHP 解释器 + 启动环境(Web 服务或 CLI 封装)**。所谓“最稳定”,取决于你的使用场景:是要分发给普通用户双击即用?还是保护源码?或是离线演示?没有万能工具,只有匹配需求的方案。
ExeOutput for PHP:Windows 桌面分发最省心的选择
对多数中小型 PHP 应用(如内部管理工具、数据录入页、离线报表系统),ExeOutput for PHP 是目前 Windows 平台下最成熟、故障率最低的商用方案。它不是编译器,而是把精简版 PHP + SQLite + Chromium Embedded Framework(CEF)全打包进一个 .exe,启动后自动拉起本地服务并打开内置浏览器窗口。
- 支持常见扩展:
mysqli、pdo_sqlite、gd、mbstring等可勾选启用 - 入口文件设为
index.php后,整个项目目录(含 CSS/JS/图片)会被完整嵌入,路径引用照常工作 - 生成的
.exe在 Win7–Win11 均可运行,无需 VC++ 运行库(它自带) - 坑点:不支持 WebSocket、
exec()等高危函数默认被禁用;若项目依赖$_SERVER['DOCUMENT_ROOT'],需改用__DIR__或手动定义
Bambalam PHP EXE Compiler:轻量 CLI 工具,适合命令行脚本
如果你的 PHP 项目本质是命令行工具(比如日志分析、批量文件处理、数据库迁移脚本),Bambalam 是极简可靠的开源选择。它不带浏览器、不启 Web 服务,只是把你的 .php 文件和一个静态链接的 PHP 解释器(php.exe)塞进单个 .exe,双击就执行 php your_script.php。
- 体积小(通常 杀毒软件都很少报毒
- 命令示例:
bambalam.exe mytool.php mytool.exe
- 限制明显:不支持
$_GET/$_POST、无 HTTP 上下文、无法用header()或会话;所有输出走控制台 - 注意:PHP 7.4+ 版本需匹配 Bambalam 的构建版本,官方最新版只到 PHP 8.1 —— 若你用 PHP 8.3,它直接报错退出,不提示原因
PHP Desktop:跨平台但部署稍重,适合长期维护项目
PHP Desktop 是开源方案中唯一真正跨平台(Windows/macOS/Linux)且持续更新的,底层用的是 CEF + 官方 PHP 二进制。它不生成单个 .exe,而是给你一个可执行主程序 + www/ 目录结构,但你可以用 Inno Setup 把它打包成安装包,体验接近原生应用。
- 优势在于调试友好:开发时直接改
www/里的代码,重启即可;上线后打包也只需复制整个目录 - 支持现代 PHP 特性(包括
match、enum、Swoole 扩展等),只要你的 PHP 版本它支持 - 坑点:首次启动慢(要解压 CEF 资源)、macOS 版需签名才能运行、Linux 版依赖较多系统库(
libglib,libgtk) - 不适合做“绿色单文件”交付——它天生是目录型结构,强行压缩进 EXE 会导致路径错乱
别碰 PHAR 重命名这种“伪 EXE”方案
有人用 PHP 自带的 Phar 打包整个项目为 app.phar,再手动改成 app.exe,指望双击运行。这在绝大多数情况下会失败:
立即学习“PHP免费学习笔记(深入)”;
- Windows 默认用记事本打开
.exe文件(因为注册表没关联 PHP) - 即使关联了,也会弹出命令行窗口闪退——除非你写了完整的 CLI 入口并处理了所有错误
- PHAR 不加密,右键用 7-Zip 就能解出全部源码,毫无保护作用
- PHP 8.2+ 默认禁用
phar.readonly = Off,很多环境根本跑不起来
ExeOutput for PHP 是当前 Windows 下最省心的;想零依赖跑命令行脚本,Bambalam 最干净;想未来可能上 macOS 或 Linux,PHP Desktop 是唯一可持续选项。其他所谓“编译成机器码”的工具(如 Roadsend、PHC),早已停止维护,GitHub 最后提交在 2018 年,现在连 PHP 7.2 都不兼容。











