PHP无法直接编译为EXE,所有方案均为打包解释器+源码;推荐精简编译php-cgi.exe(禁用非必需模块)或改用Go重写(静态单文件仅2.1MB)。

PHP 转 EXE 本质不支持直接编译,所有方案都是打包+解释器封装
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 源码(推荐
php-src8.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(含精简 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。











