phpdockercomposer-phpnixnix-flake

Composer is reading the incorrect version of PHP when installed via Nix flake


I am creating a WordPress plugin but need to connect to Xero's API. Xero suggest using the composer plugin xero-php-oauth2 so I setup my WP plugin to use composer, which works. And I have successfully installed and used phpdotenv as a test.

Unfortunately I am getting the following error:

Fatal error: Composer detected issues in your platform: Your Composer  dependencies require a PHP version "\>= 8.1.0". You are running  8.0.28. in  /var/www/html/wp-content/plugins/tws-eta-api-visualisations/vendor/composer/platform_check.php  on line 24

Composer seems to think that I my PHP version is 8.0.28 when I am running 8.1.17 and I cannot figure out why.

I am configuring both PHP and composer with a Nix flake:

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
      in {
        devShell = with pkgs; pkgs.mkShell {
          buildInputs = [
            php81
            php81.packages.composer
            nodejs-16_x
            (yarn.override { nodejs = nodejs-16_x; })
          ];

          shellHook = ''
            if [ ! -d "vendor" ]; then
              ${php81}/bin/php ${php81.packages.composer}/libexec/composer/composer.phar update
              composer install
            fi

            if [ ! -d "node_modules" ]; then
              yarn install --immutable
            fi

            yarn build

            open http://localhost:8000
          '';
        };
      }
    );
}

Does anyone know what I can do to resolve my flake?

I have tried following various guides online about setting Composer's PHP version via config updates, install commands, and composer.phar.


Solution

  • This may not be relevant for all, but this is what was happening for me.

    I was running my WordPress instance in Docker, and Docker set their PHP version to 8.0.28...

    So while my Nix flake was correctly setting the PHP version, after the files were transferred to Docker, it was using Dockers PHP version.

    Updating the docker-compose WordPress image to image: wordpress:6.0-php8.1-apache has resolved this for me.