You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署EasyAdmin时日期字段报PHP Intl扩展缺失错误

Symfony 6+EasyAdmin Heroku部署提示缺失Intl扩展排查方案

排查思路

  • 首先确认Heroku运行环境是否实际加载intl扩展:Heroku默认使用官方PHP Buildpack构建项目,不会读取项目根目录的Dockerfile,只有配置容器部署模式时Dockerfile才会生效。直接在本地终端执行heroku run php -m | grep intl,无输出则代表运行环境未安装该扩展。
  • 若使用容器部署模式,本地构建镜像后执行docker run --rm 你的镜像标签 php -m | grep intl,确认扩展是否正常加载。Alpine基础镜像常出现编译扩展后未安装运行时依赖、构建缓存导致新扩展层未打包的问题,会导致扩展无法加载。
  • 报错来自EasyAdmin的DateTimeConfigurator类,判断逻辑为extension_loaded('intl'),不存在误报,核心问题一定是运行时PHP未加载intl扩展,不需要排查代码层面的配置。

解决方案

根据你使用的Heroku部署模式选对应方案处理即可:

采用默认PHP Buildpack部署(最常用场景)

这种场景下你写的Dockerfile不会被执行,直接通过Composer声明扩展依赖即可:

  1. 在项目根目录composer.json的require节点添加两个扩展依赖:
"ext-intl": "*",
"ext-zip": "*"
  1. 执行composer update --lock更新锁文件,将变更后的composer.json和composer.lock提交推送到Heroku,部署时官方Buildpack会自动安装对应扩展及系统依赖,无需额外配置。

采用Container Registry(Docker镜像)部署

你当前的Dockerfile存在缺陷:编译扩展时安装的icu-dev属于编译依赖,被标记为虚拟构建依赖,编译完成后如果没有单独安装运行时需要的ICU库,运行阶段会找不到共享库导致intl扩展加载失败。修正Dockerfile的依赖安装段:

RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-dev \
        libzip-dev \
        zlib-dev \
    ; \
    # 安装运行时依赖,不纳入编译依赖组,不会被后续清理操作删除
    apk add --no-cache \
        icu-libs \
        libzip \
    ; \
    docker-php-ext-configure zip; \
    docker-php-ext-install -j$(nproc) \
        intl \
        zip \
    ; \
    # 仅清理编译阶段用的依赖
    apk del --no-network .build-deps;

修正后重新本地构建镜像,验证intl扩展正常加载后,推送到Heroku容器仓库重新发布即可。

验证方式

部署完成后执行heroku run php -m | grep intl,命令返回intl即代表扩展安装成功,访问对应EasyAdmin页面即可正常加载。


内容的提问来源于stack exchange,提问作者Fabien Delmotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:21:39