Marinus Klasen

Marinus Klasen

  • Development
  • Consultancy
  • Developer Resources
  • Blog
  • Contact

November 1, 2021

Setting PHP versions in Deployer deployments

Marinus Klasen

Sometimes your terminal environment (where you SSH into) uses a different PHP version then that you need. Most hosting companies do have several PHP versions available. But how do you use them, and more importantly, how do you set the right one when deploying new versions with Deployer?

The errors you can run into

In this case, composer required a higher PHP version for some packages. You’re presented with errors like:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
    Problem 1
      - Installation request for ramsey/collection 1.2.2 -> satisfiable by ramsey/collection[1.2.2].
      - ramsey/collection 1.2.2 requires php ^7.3 || ^8 -> your PHP version (7.2.33) does not satisfy that requirement.
    Problem 2
      - ramsey/collection 1.2.2 requires php ^7.3 || ^8 -> your PHP version (7.2.33) does not satisfy that requirement.
      - ramsey/uuid 4.2.3 requires ramsey/collection ^1.0 -> satisfiable by ramsey/collection[1.2.2].
      - Installation request for ramsey/uuid 4.2.3 -> satisfiable by ramsey/uuid[4.2.3].

Which version do you currently run?

Use php -v to get the current version.

Where’s your current version located?

Use which php to retrieve the path

Where’s composer located?

Use which composer to retrieve the path.

What other versions do you have installed?

ls -la /usr/bin/ might give you some more information.

You can also search for files with php in them using:
find / -type f -name "php"

You will probably see a whole lot of permision denied notices, hide them using:

find / -type f -name "php"   2>&1 | grep -v "Permission denied"

For me, this results in a nice list of PHP versions:

/opt/remi/php56/root/usr/bin/php
/opt/remi/php70/root/usr/bin/php
/opt/remi/php72/root/usr/bin/php
/opt/remi/php74/root/usr/bin/php
/opt/remi/php80/root/usr/bin/php
/opt/remi/php71/root/usr/bin/php
/opt/remi/php73/root/usr/bin/php

I can use any of this paths, to confirm it works we can run:

/opt/remi/php73/root/usr/bin/php -v

So, how do I make deployer use this?

In my case, I want to set the PHP version composer uses. We can set this by setting the bin/composer parameter in Deployer. Globally, by adding:

set('bin/composer',
	function () {
		return '/opt/remi/php73/root/usr/bin/php /usr/bin/composer';
	}
);

Or, per host, by adding:

host( 'prod' )
	->set(
		'bin/composer',
		function () {
			return '/opt/remi/php73/root/usr/bin/php /usr/bin/composer';
		}
	);

That’s it! Happy deploying!

About Marinus Klasen

Marinus has been working in software/web development for more than a decade. Since 2020 his attention shifted on sharing knowledge and developing products and tools for sharing knowledge.

Marinus Klasen on Twitter

This site runs on Cloudways.
It's fast isn't it?
Cloudways offers high-quality, fast and affordable hosting.

Learn more

Need a hand? Post your project and hire me and other top notch developers on Codeable.

Hire me on Codeable

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Ready to take action?

I'm looking forward to discuss your projects and goals!
Feel free to reach out using the contact details below.

Marinus Klasen

[email protected]
twitter.com/marinusklasen
linkedin.com/in/marinusklasen

  • GitHub
  • LinkedIn
  • Twitter

Have you read?

  • Storing private data with SSH on WPEngine sitesDecember 15, 2022
  • Get the HTML content of a block edit page or post in WordPressNovember 30, 2022
  • Rename Coupon code text to Discount code in WoocommerceNovember 3, 2022
  • Background-size cover in mPDFOctober 22, 2022
  • WordPress.com SSH & duplicating a WordPress.com website locallyOctober 11, 2022

Copyright © 2023 · Marinus Klasen | Webdesign by Team Rood