返回博客

如何修复 Drupal 项目中 Composer 的“PHP 版本不满足要求”错误

2023-09-093 分钟阅读

对于构建 Drupal 网站的人来说,Composer 至关重要。它有助于管理和添加新的网站组件,如模块和主题。但如果您对 Composer 的工作方式感到困惑,可以将其视为一个乐于助人的杂货购物者。不确定这个类比?请查看这篇文章:“理解 Composer:一个简单的杂货购物类比,以实现更好的依赖管理”

然而,有时在将我们的工作从本地环境迁移到服务器时,我们可能会遇到“PHP 版本不满足要求”错误:

正在从锁定文件安装依赖项(包括 require-dev)
正在验证锁定文件内容是否可以在当前平台安装。
您的锁定文件不包含兼容的包集。请运行 composer update。
Drupal 项目中 Composer 的“PHP 版本不满足要求”错误
Drupal 项目中 Composer 的“PHP 版本不满足要求”错误

此错误意味着您的本地设置中的 PHP 版本与服务器上的 PHP 版本不同,从而导致 Drupal 网站出现问题。

为什么会出现“Drupal 项目中 Composer 的‘PHP 版本不满足要求’错误”?

在处理 Drupal 项目时,如果您在本地运行 composer update,Composer 会根据您使用的 PHP 版本设置 composer.lock 文件。当此锁定文件在具有不同 PHP 版本的环境中运行时,就会出现问题。

Drupal 开发人员的解决方案:

  1. 同步 PHP 版本:目标是在所有环境(无论是本地、暂存还是生产环境)中使用相同的 PHP 版本。这种一致性可以防止差异,并确保 Drupal 模块和主题能够一致地运行。在本地使用 ddev 时,调整 PHP 版本非常简单。您可以使用以下命令切换到 PHP 版本 8.1:
ddev config --php-version 8.1
  1. 使用 Composer 的平台配置:如果您无法在所有环境中使用相同的 PHP 版本,则可以配置 Composer 来模拟特定的 PHP 版本。在您的 Drupal 项目的 composer.json 中,包含:
"config": {
    "platform": {
        "php": "8.1.0"
    }
}
  1. 现在,即使您的本地版本不同,Composer 也会像运行 PHP 8.1 一样解析依赖项。
  2. 推送更改并更新 Drupal:提交并推送修改后的 composer.jsoncomposer.lock 文件。当您在服务器上拉取它们时,运行 composer install 以确保 Drupal 获取正确的依赖项集。
  3. 定期检查 Drupal 模块的 PHP 兼容性:虽然核心 Drupal 更新通常经过充分测试,但第三方模块有时可能会出现兼容性问题。在部署之前,定期检查模块的 Composer 要求并在本地进行测试。
  4. Drupal 的持续集成:Acquia Pipelines 或面向 Drupal 的 CI 解决方案等工具可以帮助强制执行 PHP 版本的一致性,确保您的 Drupal 项目在部署过程中保持无错误。

结论:

使用 Drupal 和 Composer 意味着要小心匹配 PHP 版本。通过提前规划,您的网站更新可以更顺利地进行,问题更少。最好在所有地方保持相同的 PHP 版本,以便更轻松地进行开发。

祝您调试愉快!