shivammathur/setup-php@v2 支持 php 8.3,但需使用其最新版(2026 年中已内置),且必须显式声明 php-version: '8.3'(字符串格式)、启用 mbstring/xml/curl/json/phar/zip 等扩展,否则因缺失扩展或行为变更(如 mysqlnd 默认禁用、autoload 路径校验变严)导致 ci 失败。

php8.3 在 GitHub Actions 中不是开箱即用的预装版本,必须显式声明并安装——直接写 php-version: '8.3' 但不指定正确 Action 或版本号,会报错 Version 8.3 not found。
shivammathur/setup-php@v2 支持 php8.3 吗?
支持,但有前提:
-
v2的最新版(截至 2026 年中)已内置8.3,但旧缓存可能没更新 - 必须配合
extension显式启用常用扩展(如mbstring、xml、curl),否则composer install或测试会失败
常见错误现象:
-
PHP Fatal error: Uncaught Error: Call to undefined function mb_strlen() -
Could not find package ... Your requirements could not be resolved.(因缺少json或phar扩展)
实操建议:
- 使用
with: php-version: '8.3'(字符串形式,不能写8.3.0或省略引号) - 强制启用基础扩展:
extensions: mbstring,xml,curl,json,phar,zip - 关闭
Xdebug(coverage: none),避免测试变慢甚至超时
matrix 多版本测试时,php8.3 要单独处理吗?
不用单独处理,但要注意兼容性断点:
-
php8.3默认禁用mysqlnd(如果项目用PDO::MYSQL_ATTR_INIT_COMMAND会报错) -
ext-gd在 Ubuntu 22.04+ 上需额外安装系统包(libfreetype6-dev等),仅靠setup-php不够
所以推荐:
- 测试矩阵里保留
'8.1'、'8.2'、'8.3' - 在
steps中统一加一条系统级依赖安装(仅当用到 GD / ImageMagick 时):run: sudo apt-get update && sudo apt-get install -y libfreetype6-dev libjpeg-dev libpng-dev
- 避免在
8.3下运行已废弃的函数(如create_function()),CI 会直接 fail
composer install 在 php8.3 下失败的常见原因
根本问题不是 Composer 版本,而是 PHP 自身行为变更:
-
php8.3严格校验vendor/autoload.php加载路径,若项目用了自定义autoload-dev且含相对路径,会抛Warning: require(): Failed opening required -
ext-opcache默认开启,但某些旧扩展(如ioncube)与之冲突,导致composer dump-autoload -o报错
建议步骤:
- 运行前加检查:
run: php -v && php -m | grep -E "(mbstring|xml|curl|json)"
- 安装时加
--no-plugins避免第三方插件干扰 - 若用
composer.lock,确保其生成环境 PHP 版本 ≥ 8.3(否则platform配置可能被忽略)
php8.3 的 CI 配置关键不在“能不能跑”,而在于“哪些扩展和行为默认关了、哪些警告升级成错误”——漏掉任一隐式变更,流水线就会在看似无关的步骤中断。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











