
windows 环境下启用 php intl 扩展后 apache 服务报错 #1067(进程意外终止),根本原因是 php_intl.dll 依赖的 icu 动态链接库未被 apache 正确加载。
windows 环境下启用 php intl 扩展后 apache 服务报错 #1067(进程意外终止),根本原因是 php_intl.dll 依赖的 icu 动态链接库未被 apache 正确加载。
在 Windows 上通过 Apache(如 XAMPP、WAMP 或手动部署)运行 PHP 时,启用 intl 扩展看似只需在 php.ini 中取消注释:
extension=intl
但实际启动 Apache 服务时却失败,并弹出系统错误 #1067:进程意外终止。值得注意的是:若直接通过命令行运行 httpd.exe(如 apache\bin\httpd.exe -k start),服务可正常启动且无日志报错——这正揭示了问题的关键:Apache 作为 Windows 服务运行时,其 DLL 加载路径与命令行模式不同。
php_intl.dll 并非独立模块,它严重依赖一组名为 ICU(International Components for Unicode)的底层国际化库,通常以 icu*.dll 命名(例如 icudt72.dll、icuin72.dll、icuio72.dll、icuuc72.dll —— 版本号随 PHP 版本变化)。这些文件默认位于 PHP 安装目录(如 C:\php\)下,但 当 Apache 以 Windows 服务方式运行时,它仅在其自身 bin/ 目录(如 C:\apache\bin\)中搜索依赖 DLL,而不会自动查找 PHP 目录。
✅ 正确解决步骤如下:
立即学习“PHP免费学习笔记(深入)”;
-
定位 ICU DLL 文件
进入你的 PHP 安装目录(例如 C:\php\),查找所有以 icu 开头、.dll 结尾的文件(通常为 4 个,版本号一致):icudtXX.dll icuinXX.dll icuioXX.dll icuucXX.dll
⚠️ 注意:XX 表示 ICU 版本号(如 72、73、74),必须严格匹配当前 PHP 版本所带的 ICU 版本(可通过 php -i | findstr "ICU" 验证)。
复制到 Apache 的 bin 目录
将上述全部 icu*.dll 文件复制到 Apache 的 bin/ 文件夹中(例如 C:\Apache24\bin\)。确保目标路径与 httpd.exe 同级。-
验证配置并重启服务
- 再次确认 php.ini 中已启用 extension=intl;
- 检查 extension_dir 指向正确(如 extension_dir = "C:\php\ext");
- 以管理员身份运行命令提示符,执行:
net stop Apache2.4 net start Apache2.4
(服务名请根据实际安装情况调整,如 wampapache64、xamppapache 等)
? 重要注意事项:
- 每次升级 PHP 版本后,*必须重新复制对应新版的 `icu.dll` 文件** —— 不同 PHP 版本捆绑的 ICU 版本不兼容,混用将导致启动失败或运行时崩溃;
- 不要将 PHP 目录加入系统 PATH 试图“绕过”此问题,这会引发环境混乱和潜在安全风险;
- 若仍失败,请检查 Windows 事件查看器 → Windows 日志 → 应用程序,筛选 Apache 或 PHP 相关错误,确认是否出现 The specified module could not be found 类提示,进一步定位缺失 DLL;
- 推荐使用 php -m | findstr intl 和 php --ri intl 验证扩展是否在 CLI 模式下真正可用,排除 php.ini 路径误配可能。
完成以上操作后,Apache 服务即可稳定加载 intl 扩展,支持 datefmt_create()、collator_create()、Unicode 正则等国际化功能,无需再降级为命令行手动启动。











