Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/metabox/class-custom-fields.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/metabox/class-custom-fields.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/metabox/class-custom-fields.php	(working copy)
@@ -14,6 +14,7 @@
 			'stable_tag' => 'Stable Tag',
 			'tested' => 'Tested With',
 			'requires' => 'Requires',
+			'requires_php' => 'Requires PHP',
 			'donate_link' => 'Donate URL',
 			'header_plugin_uri' => 'Plugin URI',
 			'header_author' => 'Plugin Author',
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin.php	(working copy)
@@ -99,6 +99,7 @@
 
 		$result['requires'] = get_post_meta( $post_id, 'requires', true ) ?: false;
 		$result['tested'] = get_post_meta( $post_id, 'tested', true ) ?: false;
+		$result['requires_php'] = get_post_meta( $post_id, 'requires_php', true ) ?: false;
 		$result['compatibility'] = array();
 		$result['rating'] = ( get_post_meta( $post_id, 'rating', true ) ?: 0 ) * 20; // Stored as 0.0 ~ 5.0, API outputs as 0..100
 		$result['ratings'] = array_map( 'intval', (array) get_post_meta( $post_id, 'ratings', true ) );
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php	(working copy)
@@ -367,6 +367,13 @@
 			'show_in_rest'      => true,
 		) );
 
+		register_meta( 'post', 'requires_php', array(
+			'description'       => __( 'The minimum version of PHP the plugin needs to run.', 'wporg-plugins' ),
+			'single'            => true,
+			// TODO 'sanitize_callback' => 'absint',
+			'show_in_rest'      => true,
+		) );
+
 		register_meta( 'post', 'stable_tag', array(
 			'description'       => __( 'Stable version of the plugin.', 'wporg-plugins' ),
 			'single'            => true,
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php	(working copy)
@@ -25,6 +25,7 @@
 	public $readme_fields = array(
 		'tested',
 		'requires',
+		'requires_php',
 		'donate_link',
 		'license',
 		'license_uri',
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/jobs/class-api-update-updater.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/jobs/class-api-update-updater.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/jobs/class-api-update-updater.php	(working copy)
@@ -71,6 +71,7 @@
 			'plugin_name_san' => sanitize_title_with_dashes( get_post_meta( $post->ID, 'header_name', true ) ),
 			'tested'          => get_post_meta( $post->ID, 'tested', true ),
 			'requires'        => get_post_meta( $post->ID, 'requires', true ),
+			'requires_php'    => get_post_meta( $post->ID, 'requires_php', true ),
 			'upgrade_notice'  => '',
 			'last_updated'    => $post->post_modified,
 		);
@@ -122,6 +123,7 @@
   `plugin_name_san` varchar(255) NOT NULL DEFAULT '',
   `tested` varchar(128) NOT NULL DEFAULT '',
   `requires` varchar(128) NOT NULL DEFAULT '',
+  `requires_php` varchar(128) NOT NULL DEFAULT '',
   `upgrade_notice` text,
   `last_updated` datetime NOT NULL,
   PRIMARY KEY (`plugin_id`),
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/readme/class-parser.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/readme/class-parser.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/readme/class-parser.php	(working copy)
@@ -32,6 +32,11 @@
 	public $tested = '';
 
 	/**
+	 * @var string
+	 */
+	public $requires_php = '';
+
+	/**
 	 * @var array
 	 */
 	public $contributors = array();
@@ -117,6 +122,7 @@
 		'tested up to'      => 'tested',
 		'requires'          => 'requires',
 		'requires at least' => 'requires',
+		'requires php'      => 'requires_php',
 		'tags'              => 'tags',
 		'contributors'      => 'contributors',
 		'donate link'       => 'donate_link',
@@ -227,6 +233,9 @@
 		if ( ! empty( $headers['tested'] ) ) {
 			$this->tested = $headers['tested'];
 		}
+		if ( ! empty( $headers['requires_php'] ) ) {
+			$this->requires_php = $headers['requires_php'];
+		}
 		if ( ! empty( $headers['contributors'] ) ) {
 			$this->contributors = explode( ',', $headers['contributors'] );
 			$this->contributors = array_map( 'trim', $this->contributors );
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/readme/class-validator.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/readme/class-validator.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/readme/class-validator.php	(working copy)
@@ -75,6 +75,10 @@
 			/* Translators: Plugin header tag; */
 			$warnings[] = sprintf( __( '%s is missing.', 'wporg-plugins' ), '<code>Tested up to</code>' );
 		}
+		if ( empty( $readme->requires_php ) ) {
+			/* Translators: Plugin header tag; */
+			$warnings[] = sprintf( __( '%s is missing.', 'wporg-plugins' ), '<code>Requires PHP</code>' );
+		}
 		if ( empty( $readme->stable_tag ) ) {
 			/* Translators: 1: Plugin header tag; 2: SVN directory; 3: Plugin header tag; */
 			$warnings[] = sprintf( __( '%1$s is missing.  Hint: If you treat %2$s as stable, put %3$s.', 'wporg-plugins' ), '<code>Stable tag</code>', '<code>/trunk/</code>', '<code>Stable tag: trunk</code>' );
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload-handler.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload-handler.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload-handler.php	(working copy)
@@ -216,6 +216,7 @@
 				'meta_input'   => array(
 					'tested'                   => $readme->tested,
 					'requires'                 => $readme->requires,
+					'requires_php'             => $readme->requires_php,
 					'stable_tag'               => $readme->stable_tag,
 					'upgrade_notice'           => $readme->upgrade_notice,
 					'contributors'             => $readme->contributors,
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/standalone/class-plugins-info-api-request.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/standalone/class-plugins-info-api-request.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/standalone/class-plugins-info-api-request.php	(working copy)
@@ -26,6 +26,7 @@
 		'ratings'           => false,
 		'reviews'           => false,
 		'requires'          => false,
+		'requires_php'      => false,
 		'sections'          => false,
 		'short_description' => false,
 		'tags'              => false,
@@ -45,6 +46,7 @@
 		'rating'            => true,
 		'ratings'           => true,
 		'requires'          => true,				
+		'requires_php'      => true,
 		'sections'          => true,
 		'tags'              => true,
 		'tested'            => true,
@@ -62,6 +64,7 @@
 		'rating'            => true,
 		'ratings'           => true,
 		'requires'          => true,				
+		'requires_php'      => true,
 		'sections'          => true,
 		'short_description' => true,
 		'tags'              => true,
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/tests/phpunit/tests/wporg-plugin-api-performance.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/tests/phpunit/tests/wporg-plugin-api-performance.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/tests/phpunit/tests/wporg-plugin-api-performance.php	(working copy)
@@ -24,6 +24,7 @@
 		'sections'          => true,
 		'tested'            => true,
 		'requires'          => true,
+		'requires_php'      => true,
 		'rating'            => true,
 		'ratings'           => true,
 		'downloaded'        => true,
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/tests/phpunit/tests/wporg-plugin-api.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/tests/phpunit/tests/wporg-plugin-api.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/tests/phpunit/tests/wporg-plugin-api.php	(working copy)
@@ -23,6 +23,7 @@
 		'sections'          => true,
 		'tested'            => true,
 		'requires'          => true,
+		'requires_php'      => true,
 		'rating'            => true,
 		'ratings'           => true,
 		'downloaded'        => true,
@@ -241,6 +242,7 @@
 			$this->assertObjectHasAttribute( 'tested', $plugin_info, 'Tested exists' );
 			$this->assertAttributeInternalType( 'string', 'tested', $plugin_info, 'Tested should be a string' );
 		}
+		$this->assertObjectHasAttribute( 'requires_php', $plugin_info, 'Requires PHP exists' );
 		$this->assertObjectHasAttribute( 'compatibility', $plugin_info, 'Compatibility exists' );
 		$this->assertAttributeInternalType( 'array', 'compatibility', $plugin_info, 'Compatibility should be an array' );
 
Index: wordpress.org/public_html/wp-content/plugins/plugin-directory/widgets/class-meta.php
===================================================================
--- wordpress.org/public_html/wp-content/plugins/plugin-directory/widgets/class-meta.php	(revision 5711)
+++ wordpress.org/public_html/wp-content/plugins/plugin-directory/widgets/class-meta.php	(working copy)
@@ -49,19 +49,24 @@
 			</li>
 			<li><?php printf( __( 'Active installs: %s', 'wporg-plugins' ), '<strong>' . Template::active_installs( false ) . '</strong>' ); ?></li>
 
-            <?php if ( $requires = (string) get_post_meta( $post->ID, 'requires', true ) ) : ?>
+			<?php if ( $requires = (string) get_post_meta( $post->ID, 'requires', true ) ) : ?>
 				<li><?php 
 				_e( 'Requires WordPress Version:', 'wporg-plugins' );
 				echo '<strong>' . esc_html( $requires ) . '</strong>';
 				?></li>
-            <?php endif; ?>
+			<?php endif; ?>
 
-
-
 			<?php if ( $tested_up_to = (string) get_post_meta( $post->ID, 'tested', true ) ) : ?>
 				<li><?php printf( __( 'Tested up to: %s', 'wporg-plugins' ), '<strong>' . $tested_up_to . '</strong>' ); ?></li>
 			<?php endif; ?>
 
+			<?php if ( $requires_php = (string) get_post_meta( $post->ID, 'requires_php', true ) ) : ?>
+				<li><?php 
+				_e( 'Requires PHP Version:', 'wporg-plugins' );
+				echo '<strong>' . esc_html( $requires_php ) . '</strong>';
+				?></li>
+			<?php endif; ?>
+
 			<?php if ( $tags = get_the_term_list( $post->ID, 'plugin_tags', '<div class="tags">', '', '</div>' ) ) : ?>
 				<li class="clear"><?php
 					$terms = get_the_terms( $post, 'plugin_tags' );
