diff --git src/wp-admin/css/list-tables-rtl.css src/wp-admin/css/list-tables-rtl.css
index a262405bd7..85d8a75aec 100644
--- src/wp-admin/css/list-tables-rtl.css
+++ src/wp-admin/css/list-tables-rtl.css
@@ -1523,11 +1523,18 @@ div.action-links,
 .plugin-card .compatibility-incompatible:before {
 	content: "\f158";
 }
+.plugin-card .column-compatibility .compatibility-incompatible:before {
+	color: #f00;
+}
 
 .plugin-card .compatibility-compatible:before {
 	content: "\f147";
 }
 
+.plugin-card .column-compatibility .compatibility-compatible:before {
+	color: #008000;
+}
+
 .plugin-icon {
 	position: absolute;
 	top: 20px;
diff --git src/wp-admin/css/list-tables.css src/wp-admin/css/list-tables.css
index 1f463e6e54..950e3948e5 100644
--- src/wp-admin/css/list-tables.css
+++ src/wp-admin/css/list-tables.css
@@ -1524,10 +1524,18 @@ div.action-links,
 	content: "\f158";
 }
 
+.plugin-card .column-compatibility .compatibility-incompatible:before {
+	color: #f00;
+}
+
 .plugin-card .compatibility-compatible:before {
 	content: "\f147";
 }
 
+.plugin-card .column-compatibility .compatibility-compatible:before {
+	color: #008000;
+}
+
 .plugin-icon {
 	position: absolute;
 	top: 20px;
diff --git src/wp-admin/includes/class-wp-plugin-install-list-table.php src/wp-admin/includes/class-wp-plugin-install-list-table.php
index a19729b1d4..fedb5f7118 100644
--- src/wp-admin/includes/class-wp-plugin-install-list-table.php
+++ src/wp-admin/includes/class-wp-plugin-install-list-table.php
@@ -456,6 +456,8 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
 
 		$group = null;
 
+		$this->enforce_php_requirement();
+
 		foreach ( (array) $this->items as $plugin ) {
 			if ( is_object( $plugin ) ) {
 				$plugin = (array) $plugin;
@@ -665,15 +667,27 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
 				</div>
 				<div class="column-compatibility">
 					<?php
+					echo '<strong>' . __( 'Requirements' ) . '</strong><br>';
 					$wp_version = get_bloginfo( 'version' );
 
-					if ( ! empty( $plugin['tested'] ) && version_compare( substr( $wp_version, 0, strlen( $plugin['tested'] ) ), $plugin['tested'], '>' ) ) {
-						echo '<span class="compatibility-untested">' . __( 'Untested with your version of WordPress' ) . '</span>';
-					} elseif ( ! empty( $plugin['requires'] ) && version_compare( substr( $wp_version, 0, strlen( $plugin['requires'] ) ), $plugin['requires'], '<' ) ) {
-						echo '<span class="compatibility-incompatible">' . __( '<strong>Incompatible</strong> with your version of WordPress' ) . '</span>';
+					if ( $this->is_wordpress_compatible($plugin['tested'], '>' ) ) {
+						echo '<span class="compatibility-untested" aria-label="' . esc_attr__( 'Plugin untested with current WordPress version' ) . '">' . __( 'WordPress untested' ) . '</span>';
+					} elseif ( $this->is_wordpress_compatible($plugin['requires'], '<') ) {
+						/* translators: WordPress required version */
+						printf( '<span class="compatibility-incompatible" aria-label="' . esc_attr__( 'Plugin incompatible with current WordPress version' ) . '">' . __( 'WordPress %s' ) . '</span>', $plugin['requires'] );
 					} else {
-						echo '<span class="compatibility-compatible">' . __( '<strong>Compatible</strong> with your version of WordPress' ) . '</span>';
+						/* translators: WordPress required version */
+						printf( '<span class="compatibility-compatible" aria-label="' . esc_attr__( 'Plugin compatible with current WordPress version' ) . '">' . __( 'WordPress %s' ) . '</span>', $plugin['requires'] );
 					}
+
+					/**
+					 * Add additional compatibility information to bottom of plugin card.
+					 *
+					 * @since 4.9.x
+					 *
+					 * @param array $plugin Readme.txt data from current plugin.
+					 */
+					do_action( 'plugin_install_compatibilty_information', $plugin );
 					?>
 				</div>
 			</div>
@@ -686,4 +700,92 @@ class WP_Plugin_Install_List_Table extends WP_List_Table {
 			echo '</div></div>';
 		}
 	}
+
+	/**
+	 * Test if current version of WordPress is compatible with plugin requirements.
+	 *
+	 * @param mixed $version  Version required.
+	 * @param mixed $operator `version_compare()` operator.
+	 * @return bool
+	 */
+	public function is_wordpress_compatible( $version, $operator ) {
+		$wp_version = get_bloginfo( 'version' );
+		return ! empty( $version ) && version_compare( substr( $wp_version, 0, strlen( $version ) ), $version, $operator );
+	}
+
+	/**
+	 * Loads the filter hook to disable the plugin install button if PHP version not sufficient.
+	 */
+	public function enforce_php_requirement(){
+		add_filter( 'plugin_install_action_links', array( $this, 'disable_install_button' ), 10, 2 );
+		add_filter( 'wp_ajax_search-install-plugins', array( $this, 'disable_install_button' ), 10, 2 );
+		add_filter( 'post_plugins_api_plugin_information', array( $this, 'disable_install_button_iframe' ), 10, 2 );
+		add_action( 'plugin_install_compatibilty_information', array( $this, 'add_compatibility_text' ), 10, 1 );
+	}
+
+	/**
+	 * Filter plugin action links in Install Plugin page.
+	 *
+	 * @param array $action_links
+	 * @param array $plugin
+	 *
+	 * @return array $action_links
+	 */
+	public function disable_install_button( $action_links, $plugin ) {
+		$disable_button  = '<button type="button" class="button button-disabled" disabled="disabled" aria-label="' . esc_attr__( 'Cannot install this plugin' ) . '">';
+		$disable_button .= __( 'Cannot install' );
+		$disable_button .= '</button>';
+
+		if ( isset( $plugin['requires_php'] ) && $plugin['requires_php'] &&
+		    version_compare( PHP_VERSION, $plugin['requires_php'], '<=' )
+		) {
+			$action_links[0] = $disable_button;
+		}
+
+		return $action_links;
+	}
+
+	/**
+	 * Add PHP version compatibility text to plugin card bottom.
+	 *
+	 * @uses `plugin_install_compatibilty_information` action hook.
+	 *
+	 * @param mixed $plugin Current plugin data.
+	 *
+	 * @return string
+	 */
+	public function add_compatibility_text( $plugin ) {
+		if ( $plugin['requires_php'] &&
+		    version_compare( PHP_VERSION, $plugin['requires_php'], '<=' )
+		) {
+			/* translators: PHP version */
+			printf( '<br><span class="compatibility-incompatible" aria-label="' . esc_attr__( 'PHP version incompatible with this plugin' ) . '">' . __( 'PHP %s' ) . '</span>', $plugin['requires_php'] );
+		} else {
+			/* translators: PHP version */
+			printf( '<br><span class="compatibility-compatible" aria-label="' . esc_attr__( 'PHP version compatible with this plugin' ) . '">' . __( 'PHP %s' ) . '</span>', $plugin['requires_php'] );
+		}
+	}
+
+	/**
+	 * Filter button display in Plugins API Plugin Information.
+	 *
+	 * @param mixed $status
+	 * @param mixed $plugin
+	 * @return void
+	 */
+	public function disable_install_button_iframe( $status, $plugin ) {
+		$disable_button  = '<a class="button button-primary right disabled" aria-label="' . esc_attr__( 'Cannot install this plugin' ) . '">';
+		$disable_button .= __( 'Cannot install' );
+		$disable_button .= '</a>';
+
+		if ( isset( $plugin->requires_php ) && $plugin->requires_php &&
+			version_compare( PHP_VERSION, $plugin->requires_php, '<=' )
+		) {
+			echo $disable_button;
+			$status['status'] = 'cannot_install';
+		}
+
+		return $status;
+	}
+
 }
diff --git src/wp-admin/includes/plugin-install.php src/wp-admin/includes/plugin-install.php
index f765fb286e..46b64b5094 100644
--- src/wp-admin/includes/plugin-install.php
+++ src/wp-admin/includes/plugin-install.php
@@ -483,6 +483,7 @@ function install_plugin_install_status( $api, $loop = false ) {
 	}
 
 	$file = $update_file;
+
 	return compact( 'status', 'url', 'version', 'file' );
 }
 
@@ -553,6 +554,9 @@ function install_plugin_information() {
 		'other_notes'  => _x( 'Other Notes', 'Plugin installer section title' ),
 	);
 
+	$wp_list_table = _get_list_table('WP_Plugin_Install_List_Table');
+	$wp_list_table->enforce_php_requirement();
+
 	// Sanitize HTML
 	foreach ( (array) $api->sections as $section_name => $content ) {
 		$api->sections[ $section_name ] = wp_kses( $content, $plugins_allowedtags );
@@ -758,6 +762,15 @@ if ( ! empty( $api->contributors ) ) {
 	} elseif ( ! empty( $api->requires ) && version_compare( substr( $wp_version, 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
 		echo '<div class="notice notice-warning notice-alt"><p>' . __( '<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress.' ) . '</p></div>';
 	}
+	if ( isset( $api->requires_php ) && $api->requires_php &&
+		    version_compare( PHP_VERSION, $api->requires_php, '<=' )
+	) {
+		echo '<div class="notice notice-error notice-alt"><p>' . sprintf(
+ 		/* translators: Upgrading PHP page URL */
+ 		__( '<strong>Error:</strong> This plugin <strong>requires a newer version of PHP</strong>. You cannot install it. <a href="%s">Click here to learn more about upgrading PHP.</a>' ),
+ 		esc_url( __( 'https://wordpress.org/support/upgrade-php/' ) )
+ 		) . '</p></div>';
+	}
 
 	foreach ( (array) $api->sections as $section_name => $content ) {
 		$content = links_add_base_url( $content, 'https://wordpress.org/plugins/' . $api->slug . '/' );
@@ -777,6 +790,13 @@ if ( ! empty( $api->contributors ) ) {
 	echo "<div id='$tab-footer'>\n";
 	if ( ! empty( $api->download_link ) && ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) ) {
 		$status = install_plugin_install_status( $api );
+
+		/**
+		 * Filter Plugins API plugin information button.
+		 *
+		 * @since 4.9.x
+		 */
+		$status = apply_filters( 'post_plugins_api_plugin_information', $status, $api );
 		switch ( $status['status'] ) {
 			case 'install':
 				if ( $status['url'] ) {
