I have a site which is on Drupal 9 on a server which has php 7.3.29. In the Status report it says that php 7.4.0 is recommended, but not required. But since a recent update, I have the following in vendor/composer/platform.check.php:

if (!(PHP_VERSION_ID >= 70400)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
}

So I have to comment out this line otherwise my site only shows this message. Is this something that my composer configuration introduced, or is now php 7.4.0 a requirement for Drupal 9?

Comments

ressa’s picture

On PHP requirements it does say that PHP 7.4 is recommended for Drupal 9, which is not the same a required, which that code does imply ... Perhaps you can ask in Discuss PHP requirements to hear those knowledgeable about the details?

mmjvb’s picture

It has to do with your project. It is the autoload of composer that checks for minimum PHP requirement for your project.

So, it depends on the requirements of all dependencies. Use `composer depends php` to see what they are.

Suggest to investigate how real the minimum requirement is.

wagafo’s picture

I did "composer depends php", and the only thing that requires php >= 7.3 is

laminas/laminas-servicemanager          3.10.0   requires php (~7.4.0 || ~8.0.0 || ~8.1.0)

I don't know where this comes from, I'm just using composer to manage Drupal and don't install anything apart from Drupal dependencies, so in my opinion this has to do with Drupal somehow.

What is this "laminas" package anyway?

mmjvb’s picture

My situation:

laminas/laminas-servicemanager        3.7.0      requires  php (^7.3 || ~8.0.0)

docker@cli:/var/www$ composer depends laminas/laminas-servicemanager
laminas/laminas-feed            2.14.1  conflicts  laminas/laminas-servicemanager (<3.3)
laminas/laminas-servicemanager  3.7.0   replaces   zendframework/zend-servicemanager (^3.4.0)
laminas/laminas-text            2.8.1   requires   laminas/laminas-servicemanager (^3.4)
docker@cli:/var/www$

or

docker@cli:/var/www$ composer depends laminas/laminas-servicemanager -t
laminas/laminas-servicemanager 3.7.0 Factory-Driven Dependency Injection Container
├──laminas/laminas-feed 2.14.1 (conflicts laminas/laminas-servicemanager <3.3) (circular dependency aborted here)
├──laminas/laminas-servicemanager 3.7.0 (replaces zendframework/zend-servicemanager ^3.4.0)
│  └──laminas/laminas-servicemanager 3.7.0 (replaces zendframework/zend-servicemanager ^3.4.0) (circular dependency aborted here)
├──laminas/laminas-servicemanager 3.7.0 (replaces zendframework/zend-servicemanager ^3.4.0) (circular dependency aborted here)
└──laminas/laminas-text 2.8.1 (requires laminas/laminas-servicemanager ^3.4)
   ├──laminas/laminas-text 2.8.1 (replaces zendframework/zend-text ^2.7.1)
   │  └──laminas/laminas-text 2.8.1 (replaces zendframework/zend-text ^2.7.1) (circular dependency aborted here)
   ├──laminas/laminas-text 2.8.1 (replaces zendframework/zend-text ^2.7.1) (circular dependency aborted here)
   └──mathieuviossat/arraytotexttable v1.0.8 (requires laminas/laminas-text ^2.7)
      └──drupal/upgrade_status 3.10.0 (requires mathieuviossat/arraytotexttable ~1.0.0)
         └──drupal/recommended-project (requires drupal/upgrade_status ^3.8)
docker@cli:/var/www$
wagafo’s picture

This is what I get, can it be figured out from here why my project is requiring php 7.4?

> composer depends laminas/laminas-servicemanager
laminas/laminas-feed 2.14.1 conflicts laminas/laminas-servicemanager (<3.3)
laminas/laminas-text 2.8.1  requires  laminas/laminas-servicemanager (^3.4)

And:

> composer depends laminas/laminas-servicemanager -t
laminas/laminas-servicemanager 3.10.0 Factory-Driven Dependency Injection Container
├──laminas/laminas-feed 2.14.1 (conflicts laminas/laminas-servicemanager <3.3) (circular dependency aborted here)
└──laminas/laminas-text 2.8.1 (requires laminas/laminas-servicemanager ^3.4)
  ├──laminas/laminas-text 2.8.1 (replaces zendframework/zend-text ^2.7.1)
  │ └──laminas/laminas-text 2.8.1 (replaces zendframework/zend-text ^2.7.1) (circular dependency aborted here)
  ├──laminas/laminas-text 2.8.1 (replaces zendframework/zend-text ^2.7.1) (circular dependency aborted here)
  └──mathieuviossat/arraytotexttable v1.0.8 (requires laminas/laminas-text ^2.7)
     └──drupal/upgrade_status 3.11.0 (requires mathieuviossat/arraytotexttable ~1.0.0)
        └──drupal/recommended-project dev-master (requires drupal/upgrade_status ^3.4)

mmjvb’s picture

It shows you can have anything from 3.4 and higher. Looking at the different versions you can see 3.8 is the last one still allowing php 7.3.

docker@cli:/var/www$ composer show laminas/laminas-servicemanager "<3.9" -a
name     : laminas/laminas-servicemanager
descrip. : Factory-Driven Dependency Injection Container
keywords : di, dic, dependency-injection, servicemanager, service-manager, PSR-11, laminas
versions : 3.8.x-dev, 3.8.0, 3.7.x-dev, * 3.7.0, 3.6.x-dev, 3.6.4, 3.6.3, 3.6.2, 3.6.1, 3.6.0, 3.5.x-dev, 3.5.2, 3.5.1, 3.4.x-dev, 3.4.1, 3.4.0, 3.3.2, 3.3.1, 3.3.0, 3.2.1, 3.2.0, 3.1.2, 3.1.1, 3.1.0, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.7.11, 2.7.10, 2.7.9, 2.7.8, 2.7.7, 2.7.6, 2.7.5, 2.7.4, 2.7.3, 2.7.2, 2.7.1, 2.7.0, 2.6.0, 2.5.1, 2.5.0, 2.4.13, 2.4.12, 2.4.11, 2.4.10, 2.4.9, 2.4.8, 2.4.7, 2.4.6, 2.4.5, 2.4.4, 2.4.3, 2.4.2, 2.4.1, 2.4.0, 2.4.0rc7, 2.4.0rc6, 2.4.0rc5, 2.4.0rc4, 2.4.0rc3, 2.4.0rc2, 2.4.0rc1, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.3.1, 2.3.0, 2.2.10, 2.2.9, 2.2.8, 2.2.7, 2.2.6, 2.2.5, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.2.0rc3, 2.2.0rc2, 2.2.0rc1, 2.1.6, 2.1.5, 2.1.4, 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.8, 2.0.7, 2.0.6, 2.0.5, 2.0.4, 2.0.3, 2.0.2, 2.0.1, 2.0.0
type     : library
license  : BSD 3-Clause "New" or "Revised" License (BSD-3-Clause) (OSI approved) https://spdx.org/licenses/BSD-3-Clause.html#licenseText
homepage : https://laminas.dev
source   : [git] https://github.com/laminas/laminas-servicemanager.git 6918f7cc12eb521c9c73ee557dcb0616beabc683
dist     : [zip] https://api.github.com/repos/laminas/laminas-servicemanager/zipball/6918f7cc12eb521c9c73ee557dcb0616beabc683 6918f7cc12eb521c9c73ee557dcb0616beabc683
names    : laminas/laminas-servicemanager, container-interop/container-interop-implementation, psr/container-implementation

support
chat : https://laminas.dev/chat
docs : https://docs.laminas.dev/laminas-servicemanager/
forum : https://discourse.laminas.dev
issues : https://github.com/laminas/laminas-servicemanager/issues
rss : https://github.com/laminas/laminas-servicemanager/releases.atom
source : https://github.com/laminas/laminas-servicemanager

autoload
psr-4
Laminas\ServiceManager\ => src/

requires
container-interop/container-interop ^1.2
laminas/laminas-stdlib ^3.2.1
psr/container ^1.0
php ~7.4.0 || ~8.0.0 || ~8.1.0

requires (dev)
composer/package-versions-deprecated ^1.0
laminas/laminas-container-config-test ^0.3
laminas/laminas-dependency-plugin ^2.1.2
phpspec/prophecy-phpunit ^2.0
psalm/plugin-phpunit ^0.16.1
vimeo/psalm ^4.8
laminas/laminas-coding-standard ~2.2.1
mikey179/vfsstream ^1.6.10@alpha
ocramius/proxy-manager ^2.11
phpbench/phpbench ^1.1
phpunit/phpunit ^9.5.5

suggests
ocramius/proxy-manager ProxyManager ^2.1.1 to handle lazy initialization of services

provides
container-interop/container-interop-implementation ^1.2
psr/container-implementation ^1.0

conflicts
zendframework/zend-code <3.3.1
laminas/laminas-code <3.3.1
zendframework/zend-servicemanager *
docker@cli:/var/www$ composer show laminas/laminas-servicemanager "<3.8" -a
name     : laminas/laminas-servicemanager
descrip. : Factory-Driven Dependency Injection Container
keywords : di, dic, dependency-injection, servicemanager, service-manager, PSR-11, laminas
versions : 3.7.x-dev, * 3.7.0, 3.6.x-dev, 3.6.4, 3.6.3, 3.6.2, 3.6.1, 3.6.0, 3.5.x-dev, 3.5.2, 3.5.1, 3.4.x-dev, 3.4.1, 3.4.0, 3.3.2, 3.3.1, 3.3.0, 3.2.1, 3.2.0, 3.1.2, 3.1.1, 3.1.0, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.7.11, 2.7.10, 2.7.9, 2.7.8, 2.7.7, 2.7.6, 2.7.5, 2.7.4, 2.7.3, 2.7.2, 2.7.1, 2.7.0, 2.6.0, 2.5.1, 2.5.0, 2.4.13, 2.4.12, 2.4.11, 2.4.10, 2.4.9, 2.4.8, 2.4.7, 2.4.6, 2.4.5, 2.4.4, 2.4.3, 2.4.2, 2.4.1, 2.4.0, 2.4.0rc7, 2.4.0rc6, 2.4.0rc5, 2.4.0rc4, 2.4.0rc3, 2.4.0rc2, 2.4.0rc1, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.3.1, 2.3.0, 2.2.10, 2.2.9, 2.2.8, 2.2.7, 2.2.6, 2.2.5, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.2.0rc3, 2.2.0rc2, 2.2.0rc1, 2.1.6, 2.1.5, 2.1.4, 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.8, 2.0.7, 2.0.6, 2.0.5, 2.0.4, 2.0.3, 2.0.2, 2.0.1, 2.0.0
type     : library
license  : BSD 3-Clause "New" or "Revised" License (BSD-3-Clause) (OSI approved) https://spdx.org/licenses/BSD-3-Clause.html#licenseText
homepage : https://laminas.dev
source   : [git] https://github.com/laminas/laminas-servicemanager.git 89152f8ebb149a42bedfaf321ae77c03262104b0
dist     : [zip] https://api.github.com/repos/laminas/laminas-servicemanager/zipball/89152f8ebb149a42bedfaf321ae77c03262104b0 89152f8ebb149a42bedfaf321ae77c03262104b0
names    : laminas/laminas-servicemanager, container-interop/container-interop-implementation, psr/container-implementation, zendframework/zend-servicemanager

support
chat : https://laminas.dev/chat
docs : https://docs.laminas.dev/laminas-servicemanager/
forum : https://discourse.laminas.dev
issues : https://github.com/laminas/laminas-servicemanager/issues
rss : https://github.com/laminas/laminas-servicemanager/releases.atom
source : https://github.com/laminas/laminas-servicemanager

autoload
psr-4
Laminas\ServiceManager\ => src/

requires
php ^7.3 || ~8.0.0
container-interop/container-interop ^1.2
laminas/laminas-stdlib ^3.2.1
laminas/laminas-zendframework-bridge ^1.0
psr/container ^1.0

requires (dev)
composer/package-versions-deprecated ^1.0
laminas/laminas-container-config-test ^0.3
laminas/laminas-dependency-plugin ^2.1.2
mikey179/vfsstream ^1.6.8
ocramius/proxy-manager ^2.2.3
phpspec/prophecy-phpunit ^2.0
phpunit/phpunit ^9.4
psalm/plugin-phpunit ^0.16.1
vimeo/psalm ^4.8
laminas/laminas-coding-standard ~2.2.0
phpbench/phpbench ^1.0.4

suggests
ocramius/proxy-manager ProxyManager ^2.1.1 to handle lazy initialization of services

provides
container-interop/container-interop-implementation ^1.2
psr/container-implementation ^1.0

conflicts
zendframework/zend-code <3.3.1
laminas/laminas-code <3.3.1

replaces
zendframework/zend-servicemanager ^3.4.0
docker@cli:/var/www$

So, add "<3.8" to your version constraint and update

Or maybe even better add "<7.4" to your php version constraint.

wagafo’s picture

I solved this by downgrading laminas/laminas-servicemanager. I preferred this to constraining php to <7.4, because the latter will not allow me to mirror my site in systems with php >= 7.4, which I need to develop and test things.

To downgrade the above, I added the following line to the require{} section in composer.json:

"laminas/laminas-servicemanager": "<3.8"

So far everything seems to work fine. The downgraded package is a dependence of the Drupal upgrade-status module version 3.10.