PHP无法原生打包EXE并显示启动画面,实际依赖ExeOutput等工具封装PHP+Web服务器+浏览器内核;启动页为startup.html静态页面,通过exepackage.js控制显隐,资源需用exepackage://协议引用。
PHP 是服务端脚本语言,没有原生 GUI 或 Windows 启动动画能力。所谓“PHP 打包 EXE”,实际是靠第三方工具(如 ExeOutput for PHP、WebCompiler 或 PHP Desktop)把 PHP + 内置 Web Server + Chromium/IE 封装进一个 Windows 可执行文件。启动画面本质是封装器加载 HTML/CSS/JS 的过程,不是 PHP 在控制。
这是目前最常用且支持启动画面的工具。它会在主页面加载前,先显示一个本地 HTML 文件(startup.html),并提供 JS API 控制其关闭时机。
startup.html,放在项目根目录(与 index.php 同级)startup.html 中用纯 HTML/CSS/JS 实现动画,例如用 @keyframes 做淡入或旋转 logo
exePackage.hideSplash() 关闭启动页(通常在 index.php 输出完成前,通过 触发)exepackage:// 协议引用,例如 ,否则路径会 404很多用户卡在“启动页一闪而过”或“完全不显示”,核心问题不在代码,而在封装配置和生命周期理解偏差:
startup.html 必须编码为 UTF-8 无 BOM,否则 ExeOutput 加载失败且无提示Splash Timeout 值如果 ExeOutput 的限制太重(比如要动态生成启动文字、需要更长控制权),可放弃“PHP 封装器”路线,改用底层打包方式:
PHP Desktop 或 ServerGrove/phpdeskt
op 构建基础 EXE(它本质是 CEF + PHP CLI)先运行 splash.exe → 异步启动 phpdesktop.exe → 检测主窗口句柄出现后关闭 splash.exe
ExecWait 启动 splash,再用 FindWindow + SendMessage 等 API 判断主程序是否 ready,不能依赖固定延时这条路自由度高,但工作量翻倍,且每次更新 PHP 逻辑都要重新打包整个 NSIS 安装包。真正需要精细控制启动体验的团队才会走这一步。