Index: wp-admin/includes/class-wp-upgrader.php
===================================================================
--- wp-admin/includes/class-wp-upgrader.php	(revision 18977)
+++ wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -144,13 +144,24 @@
 		if ( $wp_filesystem->is_dir($working_dir) )
 			$wp_filesystem->delete($working_dir, true);
 
-		// Unzip package to working directory
-		$result = unzip_file($package, $working_dir); //TODO optimizations, Copy when Move/Rename would suffice?
+		$extension = pathinfo($package, PATHINFO_EXTENSION);
+		
+		// Make uploading a PHP file instead of a zip archive possible
+		if ( $extension == 'php' ) {
+			// Create a new folder
+			mkdir($working_dir);
+			
+			// Copy the PHP file into the new foler
+			$result = rename($package, $working_dir . '/' . basename($package));
+		} else {
+			// Unzip package to working directory
+			$result = unzip_file($package, $working_dir); //TODO optimizations, Copy when Move/Rename would suffice?
+			
+			// Once extracted, delete the package if required.
+			if ( $delete_package )
+				unlink($package);
+		}
 
-		// Once extracted, delete the package if required.
-		if ( $delete_package )
-			unlink($package);
-
 		if ( is_wp_error($result) ) {
 			$wp_filesystem->delete($working_dir, true);
 			if ( 'incompatible_archive' == $result->get_error_code() ) {
