如何使用Composer check-platform-reqs检查当前PHP版本是否符合要求?

11次阅读

composer check-platform-reqs 是 Composer 2.2+ 内置命令,用于静态验证当前系统环境(php 版本、扩展等)是否满足 composer.json 中声明的平台要求,不安装或更新包,需在含 composer.json 的项目根目录执行。

如何使用Composer check-platform-reqs检查当前PHP版本是否符合要求?

composer check-platform-reqs 是什么

composer check-platform-reqs 是 Composer 2.2+ 内置命令,用于验证当前系统环境(PHP 版本、扩展、INI 设置等)是否满足 composer.json 中声明的 platform 或依赖包的平台要求。它不安装或更新任何包,只做静态检查。

运行 check-platform-reqs 的前提条件

必须在项目根目录(含 composer.json)下执行,否则会报错 Could not find composer.json。该命令默认读取当前项目的 composer.json,不会回退到全局配置或父目录。

  • 确保已安装 Composer 2.2 或更高版本:
    composer --version
  • 确认 composer.json 中存在 requireconfig.platform 声明(例如 "php": "^8.1"
  • 若项目未锁死平台版本(如没设 config.platform.php),则检查的是依赖包自身声明的 php 要求

常见错误输出及对应原因

当 PHP 版本不匹配时,check-platform-reqs 会明确标出不满足项,例如:

PHP >=8.1 required, you have 8.0.30

这类提示直接告诉你哪条约束失败。注意以下细节:

立即学习PHP免费学习笔记(深入)”;

  • 它检查的是 php 扩展名(不是 php-cliphp-fpm 的 PATH 差异),所以请确认 which phpphp -v 输出与 Composer 实际调用的一致
  • 如果启用了 config.platform(如 "config": {"platform": {"php": "8.1.0"}}),命令会优先按该值校验,而非系统真实版本
  • 某些扩展要求(如 ext-gd)失败时,提示为 ext-gd * required, you have none,需检查 php -m | grep gd

如何让检查更严格或跳过某些项

该命令本身不支持跳过特定平台项,但可通过配置临时绕过:

  • --no-dev 可忽略 require-dev 中的平台要求
  • 若想强制按真实环境检查(忽略 config.platform),可临时注释或移除 config.platform 段再运行
  • 检查结果为非零退出码(如 1),适合集成进 CI 脚本:
    composer check-platform-reqs || exit 1

真正容易被忽略的是:它不验证 php.ini 中的运行时设置(如 memory_limitopcache.enable),这些需单独用 php --iniphp -r 'var_dump(ini_get("...")); 确认。

text=ZqhQzanResources