diff -r 48c4eec2b7e6 -r 8c2e4d02f4ef wp/wp-admin/install.php --- a/wp/wp-admin/install.php Fri Sep 05 18:40:08 2025 +0200 +++ b/wp/wp-admin/install.php Fri Sep 05 18:52:52 2025 +0200 @@ -67,7 +67,7 @@ > - + <?php _e( 'WordPress › Installation' ); ?> @@ -232,12 +232,13 @@ } /** - * @global string $wp_version The WordPress version string. - * @global string $required_php_version The required PHP version string. - * @global string $required_mysql_version The required MySQL version string. - * @global wpdb $wpdb WordPress database abstraction object. + * @global string $wp_version The WordPress version string. + * @global string $required_php_version The required PHP version string. + * @global string[] $required_php_extensions The names of required PHP extensions. + * @global string $required_mysql_version The required MySQL version string. + * @global wpdb $wpdb WordPress database abstraction object. */ -global $wp_version, $required_php_version, $required_mysql_version, $wpdb; +global $wp_version, $required_php_version, $required_php_extensions, $required_mysql_version, $wpdb; $php_version = PHP_VERSION; $mysql_version = $wpdb->db_version(); @@ -298,6 +299,29 @@ die( '

' . __( 'Requirements Not Met' ) . '

' . $compat . '

' ); } +if ( isset( $required_php_extensions ) && is_array( $required_php_extensions ) ) { + $missing_extensions = array(); + + foreach ( $required_php_extensions as $extension ) { + if ( extension_loaded( $extension ) ) { + continue; + } + + $missing_extensions[] = sprintf( + /* translators: 1: URL to WordPress release notes, 2: WordPress version number, 3: The PHP extension name needed. */ + __( 'You cannot install because WordPress %2$s requires the %3$s PHP extension.' ), + $version_url, + $wp_version, + $extension + ); + } + + if ( count( $missing_extensions ) > 0 ) { + display_header(); + die( '

' . __( 'Requirements Not Met' ) . '

' . implode( '

', $missing_extensions ) . '

' ); + } +} + if ( ! is_string( $wpdb->base_prefix ) || '' === $wpdb->base_prefix ) { display_header(); die(