AWS Elastic Beanstalk升级PHP 8.1不生效仍运行8.0版本报错
问题根因
你手动通过yum安装PHP 8.1的操作完全没生效,核心是踩了Elastic Beanstalk(以下简称EB)的部署流程和环境机制的坑:
- 执行时机错误:你把升级命令写在了
.ebextensions的commands区块,这个区块的执行时间早于EB平台内置的PHP环境初始化、composer依赖安装步骤。等你手动装完PHP 8.1,后续EB平台会把自己预置的PHP 8.0版本重新覆盖到默认环境路径,你装的版本直接被冲掉。 - 路径优先级问题:EB平台会把自带的PHP二进制路径放在系统PATH的最前面,默认调用的
php命令软链接指向平台预置的8.0版本。就算你把PHP 8.1装到了系统里,composer、php-fpm还是会优先读8.0版本,完全不会用到你新装的8.1。 - 源和包冲突:你配置的是CentOS7对应的epel、remi源,而EB的PHP平台自带专属的软件仓库,手动安装的remi源PHP包会和平台自带的PHP包产生版本冲突,不会被系统默认调用。
你看到的composer报错就是典型的PHP版本不匹配:执行composer install的进程调用的还是平台自带的PHP 8.0.6,自然无法满足monolog、symfony等包要求的>=8.1版本约束。
解决方案
推荐方案(无兼容性问题,官方支持)
不要手动通过yum改装系统PHP,直接升级EB环境的平台版本即可:
- 登录EB控制台,找到对应环境,进入「配置」-「平台」选项
- 将平台分支从当前的PHP 8.0版本,切换为官方提供的
PHP 8.1 running on Amazon Linux 2分支 - 保存配置等待环境滚动升级完成即可
这个方案完全不需要写任何自定义升级命令,EB会自动把内置的PHP、composer、php-fpm全部切换到8.1版本,composer安装依赖时会自动识别正确的版本,不会出现路径冲突问题。
临时方案(无法升级平台分支时使用)
如果因为特殊原因必须在现有PHP 8.0平台上运行PHP 8.1,需要修改你的.ebextensions配置,修正执行时机和路径配置,参考配置如下:
container_commands: 00_upgrade_php: command: | yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum -y install yum-utils rpl export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 yum-config-manager --disable 'remi-php*' yum-config-manager --enable remi-php81 rpl [remi-php81] "[remi-php81]\npriority=1" /etc/yum.repos.d/remi-php81.repo -e yum upgrade -y php php-* # 替换默认php软链接到8.1版本,覆盖EB自带的8.0软链接 ln -sf /usr/bin/php81 /usr/bin/php ln -sf /usr/bin/php81 /opt/elasticbeanstalk/php/bin/php # 重启php-fpm加载新版本 systemctl restart php-fpm # 验证版本写入日志方便排查 php -v > /var/log/php_version_check.log
注意必须把命令从commands区块移到container_commands区块,这个区块的执行时间在平台环境初始化完成之后、composer安装依赖和服务启动之前,不会被后续的平台步骤覆盖配置。
内容的提问来源于stack exchange,提问作者kqlambert
相关产品推荐
相关产品推荐

