From 5c170b4d7643b84f48d055fd6507a3514a5a09f7 Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Wed, 17 Jun 2026 12:43:55 +0530 Subject: [PATCH 1/2] refactor(php): centralize the default PHP version into a single constant Introduce PHP::DEFAULT_PHP_VERSION and PHP::SUPPORTED_PHP_VERSIONS as the single source of truth. The default value was previously hardcoded independently in three places: - the `--php` get_flag_value() default - the 8.x unsupported-version fallback - the `latest` -> image tag map in Site_PHP_Docker All three now read DEFAULT_PHP_VERSION, so moving the default is a one-line edit. The `default:` line is removed from the `--php` docblock so the constant is the authoritative default: EE injects a docblock default into the args only when one is declared, so with it gone the get_flag_value() fallback supplies the constant. Also use string literals for the versions so an x.0 version no longer stringifies to "8" in the image name. --- src/PHP.php | 20 ++++++++++++++++---- src/Site_PHP_Docker.php | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/PHP.php b/src/PHP.php index 1e4746e..7b083ee 100644 --- a/src/PHP.php +++ b/src/PHP.php @@ -26,6 +26,19 @@ */ class PHP extends EE_Site_Command { + /** + * Default PHP version for new sites. Single source of truth: this is also + * the version the `latest` image tag resolves to and the 8.x fallback for + * unsupported requests. Change this one constant to move the default. + */ + const DEFAULT_PHP_VERSION = '8.4'; + + /** + * All PHP versions EasyEngine ships images for. Keep in sync with the + * `--php` options list in the create() docblock. + */ + const SUPPORTED_PHP_VERSIONS = [ '5.6', '7.0', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', 'latest' ]; + /** * @var string $cache_type Type of caching being used. */ @@ -83,7 +96,6 @@ public function __construct() { * [--php=] * : PHP version for site. Currently only supports PHP 5.6, 7.0, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, and latest. * --- - * default: 8.4 * options: * - 5.6 * - 7.0 @@ -198,7 +210,7 @@ public function create( $args, $assoc_args ) { $this->site_data['site_fs_path'] = WEBROOT . $this->site_data['site_url']; $this->cache_type = \EE\Utils\get_flag_value( $assoc_args, 'cache' ); $this->site_data['site_ssl_wildcard'] = \EE\Utils\get_flag_value( $assoc_args, 'wildcard' ); - $this->site_data['php_version'] = \EE\Utils\get_flag_value( $assoc_args, 'php' ); + $this->site_data['php_version'] = \EE\Utils\get_flag_value( $assoc_args, 'php', self::DEFAULT_PHP_VERSION ); $this->site_data['app_sub_type'] = 'php'; $this->site_data['site_container_fs_path'] = get_public_dir( $assoc_args ); @@ -230,7 +242,7 @@ public function create( $args, $assoc_args ) { } $this->site_data['alias_domains'] = substr( $this->site_data['alias_domains'], 0, - 1 ); - $supported_php_versions = [ 5.6, 7.0, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 'latest' ]; + $supported_php_versions = self::SUPPORTED_PHP_VERSIONS; if ( ! in_array( $this->site_data['php_version'], $supported_php_versions ) ) { $old_version = $this->site_data['php_version']; $floor = (int) floor( $this->site_data['php_version'] ); @@ -240,7 +252,7 @@ public function create( $args, $assoc_args ) { $this->site_data['php_version'] = 7.4; $old_version .= ' yet'; } elseif ( 8 === $floor ) { - $this->site_data['php_version'] = 8.4; + $this->site_data['php_version'] = self::DEFAULT_PHP_VERSION; $old_version .= ' yet'; } else { EE::error( 'Unsupported PHP version: ' . $this->site_data['php_version'] ); diff --git a/src/Site_PHP_Docker.php b/src/Site_PHP_Docker.php index 9c9184e..18d2c05 100644 --- a/src/Site_PHP_Docker.php +++ b/src/Site_PHP_Docker.php @@ -65,7 +65,7 @@ public function generate_docker_compose_yml( array $filters = [], $volumes ) { $db['networks'] = $network_default; } // PHP configuration. - $php_image_key = ( 'latest' === $filters['php_version'] ? 'easyengine/php8.4' : 'easyengine/php' . $filters['php_version'] ); + $php_image_key = ( 'latest' === $filters['php_version'] ? 'easyengine/php' . PHP::DEFAULT_PHP_VERSION : 'easyengine/php' . $filters['php_version'] ); $php['service_name'] = [ 'name' => 'php' ]; $php['image'] = [ 'name' => $php_image_key . ':' . $img_versions[ $php_image_key ] ]; From c09d36207294268d6d36952c22dcb089bdc0d338 Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Wed, 17 Jun 2026 12:53:11 +0530 Subject: [PATCH 2/2] refactor(php): tighten version validation and normalize option indentation Address review feedback on the version-constant refactor: - Use a strict in_array() check for the supported-version test. Now that SUPPORTED_PHP_VERSIONS holds strings and php_version is always a string at that point, strict comparison avoids loose numeric matches (e.g. '8' loosely matching '8.0') that would otherwise skip the fallback and yield a non-existent image tag; such input now routes to the unsupported-version fallback instead. - Normalize the 8.5 entry in the --php options list to a tab to match the other entries (it used spaces), keeping the docblock consistent. --- src/PHP.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PHP.php b/src/PHP.php index 7b083ee..3f7c113 100644 --- a/src/PHP.php +++ b/src/PHP.php @@ -107,7 +107,7 @@ public function __construct() { * - 8.2 * - 8.3 * - 8.4 - * - 8.5 + * - 8.5 * - latest * --- * @@ -243,7 +243,7 @@ public function create( $args, $assoc_args ) { $this->site_data['alias_domains'] = substr( $this->site_data['alias_domains'], 0, - 1 ); $supported_php_versions = self::SUPPORTED_PHP_VERSIONS; - if ( ! in_array( $this->site_data['php_version'], $supported_php_versions ) ) { + if ( ! in_array( $this->site_data['php_version'], $supported_php_versions, true ) ) { $old_version = $this->site_data['php_version']; $floor = (int) floor( $this->site_data['php_version'] ); if ( 5 === $floor ) {