After updating PHP from 7.4 to 8.0, I ran composer update
on my existing project, and got an error like this:
- acme/some-package[1.0.0, …, 1.4.0] requires php ^5.6.4 || ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
What does this mean, and how do I fix it?
(This is a reference answer intended to cover a frequently encountered issue. The scenario is just an example. See also: "How to explain Composer's error log?")
3
Answers
The Problem
As well as the versions of other packages they require, Composer packages can specify the versions of PHP which they support.
While resolving the versions of packages to install, Composer has to find versions which match all the constraints in place:
composer.json
If there is no package that satisfies all of those constraints, you will get an error.
Common Confusions
Note that the version constraint for PHP version follows the same rules as other composer constraints. So a constraint of
^7.0
means "any version of 7.x above 7.0", and does not include 8.0.The Solution
To solve the problem, you need to relax one of those constraints:
acme/some-package
in the example) and find it on Packagist (or whatever custom package source you have configured).composer.json
, and other packages you depend on, don't exclude that new version. For instance, if you currently depend onacme/some-package
version^1.0
, but PHP 8.0 is only supported from version 2.2.0 onwards, you'll need to change your constraint to^2.2
, and make sure your application is still compatible.Temporary Workaround
Sometimes, you're pretty sure your application will run fine with the same versions of packages as you were previously using. In that case, you can use the
platform
configuration variable in yourcomposer.json
to pretend you're still using the old version. This should only be done as a temporary workaround or for testing as it means packages will be installed which may be completely broken on your new PHP version.For example:
See also "Override PHP base dependency in composer"
As an additional hint: if you want to check what you can do to make your project compatible without running
composer update
, Composer provides the commandwhy-not
. You can not only run it with packages and their versions:composer why-not vendor/package 2.0
will list all other package versions that block installing v2.0 ofvendor/package
.This also works with PHP itself:
composer why-not php 8.0
will tell you which packages block the usage of a later PHP versionIf you are using the PHP version 8, some of the plugins which are not yet supported can caused installation error.
composer install --ignore-platform-req=php
orcomposer install --ignore-platform-reqs
This option can be used to set specific requirements that composer can ignore.