PHP无法直接编译为EXE,所有方案均为打包解释器+源码;推荐精简编译php-cgi.exe(禁用非必需模块)或改用Go重写(静态单文件仅2.1MB)。
PHP 是解释型语言,没有原生编译为机器码的能力。所谓“PHP 转 EXE”,实际是把 PHP 解释器(如 php-cgi、php.exe)、你的 PHP 源码、依赖的 DLL/so 文件、启动脚本等一起打包进一个自解压/自运行容器中。体积大,根本原因在于嵌入了完整或半完整 PHP 运行时。想减小体积,核心思路不是“编译优化”,而是「精简解释器 + 剥离不用组件」。
roadsend phpcompiler 或 zzee php compiler?已淘汰,别踩坑这两个工具早于 PHP 7,仅支持 PHP 5.2–5.4,且多年未更新。它们生成的 EXE 内部仍含解释器+字节码,体积普遍 >10MB,且无法加载 openssl、curl 等现代扩展,运行时报 Call to undefined function curl_init() 是常态。目前 Windows 下唯一持续维护、支持 PHP 8.x 的可行方案是:PHP Desktop(基于 Chromium + CEF)或更轻量的 ExeOutput for PHP(商业),但后者也依赖内置 PHP。
php-win.exe 开始裁剪如果你坚持用开源方式(比如用 UPX + 自定义 PHP 构建),必须自己编译 PHP Windows 版本,并禁用所有非必需模块。关键操作如下:
php-src 8.2 分支),用 Visual Studio 编译,务必在 configure 阶段显式关闭扩展:加参数 --disable-all --disable-cli --enable-cgi --disable-phar --disable-tokenizer --without-iconv --without-xml --without-zlib
file_get_contents 和 json_encode,就只需启用 --enable-json --enable-filter,其余如 pdo、mbstring、gd 全部禁用php-cgi.exe 通常可压至 3–5MB(UPX 后),比官方二进制(12MB+)小一半以上php.ini,新建极简版:只留 extension_
dir、date.timezone、disable_functions(空值),其余全删Python + PyInstaller 或 Go 重写关键逻辑如果 PHP 脚本主要是 HTTP 请求、JSON 处理、文件读写等通用任务,硬打包 PHP 反而最重。实测对比:
PHP(含精简 php-cgi.exe + 代码) → 最小约 4.2MB
Python(pyinstaller --onefile --exclude-module tkinter --exclude-module PyQt5 main.py) → 约 6.8MB(但可进一步用 UPX 压至 3.5MB)
Go(go build -ldflags "-s -w" main.go) → 静态单文件,仅 2.1MB,无运行时依赖
尤其当你的 PHP 脚本不含模板渲染、Session 管理、复杂数据库抽象层时,重写成本远低于折腾 PHP 打包——很多用户卡在“一定要用 PHP”的假设里,反而忽略了体积源头其实是解释器本身。
真正难的不是怎么打包,而是判断哪些 PHP 功能你其实没用;删掉一个扩展可能省下 800KB,但漏看 php.ini 里一句 zend_extension=opcache.dll,就会让最终 EXE 多带一个 1.2MB 的 DLL。