diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 6c8ee5e5f2..bd7d49ef8b 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -22,6 +22,11 @@
  */
 const DRUPAL_MINIMUM_PHP = '5.5.9';
 
+/**
+ * Minimum recommended version of PHP.
+ */
+const DRUPAL_RECOMMENDED_PHP = '7.1.0';
+
 /**
  * Minimum recommended value of PHP memory_limit.
  *
diff --git a/core/modules/simpletest/src/InstallerTestBase.php b/core/modules/simpletest/src/InstallerTestBase.php
index 92f33dcf5f..5b4262ba0c 100644
--- a/core/modules/simpletest/src/InstallerTestBase.php
+++ b/core/modules/simpletest/src/InstallerTestBase.php
@@ -122,6 +122,11 @@ protected function setUp() {
     // Select profile.
     $this->setUpProfile();
 
+    // Skip the "recommended PHP version" warning on older test environments.
+    if (version_compare(phpversion(), DRUPAL_RECOMMENDED_PHP) < 0) {
+      $this->continueOnExpectedWarnings(['PHP']);
+    }
+
     // Configure settings.
     $this->setUpSettings();
 
@@ -218,4 +223,24 @@ protected function refreshVariables() {
     }
   }
 
+  /**
+   * Continues installation when an expected warning is found.
+   *
+   * @param string $allowed_warnings
+   *   A list of warning summaries to ignore (e.g. 'PHP', 'PHP OPcode caching',
+   *   etc.).
+   */
+  protected function continueOnExpectedWarnings($allowed_warnings = []) {
+    $warning_elements = $this->cssSelect('.system-status-report__entry--warning summary');
+    // Don't allow more warnings than the ones permitted.
+    if (count($allowed_warnings) >= count($warning_elements)) {
+      $warnings = [];
+      foreach ($warning_elements as $warning) {
+        $warnings[] = trim((string) $warning);
+      }
+      $this->assertEqual($allowed_warnings, $warnings);
+      $this->clickLink('continue anyway');
+    }
+  }
+
 }
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index ce48afe725..0817aa37a6 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -183,11 +183,15 @@ function system_requirements($phase) {
     // If PHP is old, it's not safe to continue with the requirements check.
     return $requirements;
   }
+  elseif (version_compare($phpversion, DRUPAL_RECOMMENDED_PHP) < 0) {
+    $requirements['php']['description'] = t('Your PHP installation is running version %version. It is recommended to upgrade to version %recommended or higher to ensure your site remains secure and continues to receive updates. See the <a href="http://php.net/supported-versions.php">PHP version support documentation</a> and the <a href=":php_requirements">PHP requirements handbook page</a> for more information.', ['%version' => $phpversion, '%recommended' => DRUPAL_RECOMMENDED_PHP, ':php_requirements' => 'https://www.drupal.org/docs/8/system-requirements/php']);
+    $requirements['php']['severity'] = REQUIREMENT_WARNING;
+  }
 
   // Suggest to update to at least 5.5.21 or 5.6.5 for disabling multiple
   // statements.
   if (($phase === 'install' || \Drupal::database()->driver() === 'mysql') && !SystemRequirements::phpVersionWithPdoDisallowMultipleStatements($phpversion)) {
-    $requirements['php'] = [
+    $requirements['php_multiple_statement'] = [
       'title' => t('PHP (multiple statement disabling)'),
       'value' => $phpversion_label,
       'description' => t('PHP versions higher than 5.6.5 or 5.5.21 provide built-in SQL injection protection for mysql databases. It is recommended to update.'),
