wp/wp-admin/maint/repair.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
equal deleted inserted replaced
8:c7c34916027a 9:177826044cd9
     3  * Database Repair and Optimization Script.
     3  * Database Repair and Optimization Script.
     4  *
     4  *
     5  * @package WordPress
     5  * @package WordPress
     6  * @subpackage Database
     6  * @subpackage Database
     7  */
     7  */
     8 define('WP_REPAIRING', true);
     8 define( 'WP_REPAIRING', true );
     9 
     9 
    10 require_once( dirname( dirname( dirname( __FILE__ ) ) ) . '/wp-load.php' );
    10 require_once( dirname( dirname( dirname( __FILE__ ) ) ) . '/wp-load.php' );
    11 
    11 
    12 header( 'Content-Type: text/html; charset=utf-8' );
    12 header( 'Content-Type: text/html; charset=utf-8' );
    13 ?>
    13 ?>
    16 <head>
    16 <head>
    17 	<meta name="viewport" content="width=device-width" />
    17 	<meta name="viewport" content="width=device-width" />
    18 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    18 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    19 	<meta name="robots" content="noindex,nofollow" />
    19 	<meta name="robots" content="noindex,nofollow" />
    20 	<title><?php _e( 'WordPress &rsaquo; Database Repair' ); ?></title>
    20 	<title><?php _e( 'WordPress &rsaquo; Database Repair' ); ?></title>
    21 	<?php
    21 	<?php wp_admin_css( 'install', true ); ?>
    22 	wp_admin_css( 'install', true );
       
    23 	?>
       
    24 </head>
    22 </head>
    25 <body class="wp-core-ui">
    23 <body class="wp-core-ui">
    26 <p id="logo"><a href="<?php echo esc_url( __( 'https://wordpress.org/' ) ); ?>" tabindex="-1"><?php _e( 'WordPress' ); ?></a></p>
    24 <p id="logo"><a href="<?php echo esc_url( __( 'https://wordpress.org/' ) ); ?>"><?php _e( 'WordPress' ); ?></a></p>
    27 
    25 
    28 <?php
    26 <?php
    29 
    27 
    30 if ( ! defined( 'WP_ALLOW_REPAIR' ) ) {
    28 if ( ! defined( 'WP_ALLOW_REPAIR' ) || ! WP_ALLOW_REPAIR ) {
    31 
    29 
    32 	echo '<h1 class="screen-reader-text">' . __( 'Allow automatic database repair' ) . '</h1>';
    30 	echo '<h1 class="screen-reader-text">' . __( 'Allow automatic database repair' ) . '</h1>';
    33 
    31 
    34 	echo '<p>';
    32 	echo '<p>';
    35 	printf(
    33 	printf(
    63 
    61 
    64 	if ( $duplicated_keys || $missing_key ) {
    62 	if ( $duplicated_keys || $missing_key ) {
    65 
    63 
    66 		echo '<h2 class="screen-reader-text">' . __( 'Check secret keys' ) . '</h2>';
    64 		echo '<h2 class="screen-reader-text">' . __( 'Check secret keys' ) . '</h2>';
    67 
    65 
    68 		// Translators: 1: wp-config.php; 2: Secret key service URL.
    66 		/* translators: 1: wp-config.php, 2: secret key service URL */
    69 		echo '<p>' . sprintf( __( 'While you are editing your %1$s file, take a moment to make sure you have all 8 keys and that they are unique. You can generate these using the <a href="%2$s">WordPress.org secret key service</a>.' ), '<code>wp-config.php</code>', 'https://api.wordpress.org/secret-key/1.1/salt/' ) . '</p>';
    67 		echo '<p>' . sprintf( __( 'While you are editing your %1$s file, take a moment to make sure you have all 8 keys and that they are unique. You can generate these using the <a href="%2$s">WordPress.org secret key service</a>.' ), '<code>wp-config.php</code>', 'https://api.wordpress.org/secret-key/1.1/salt/' ) . '</p>';
    70 	}
    68 	}
    71 
       
    72 } elseif ( isset( $_GET['repair'] ) ) {
    69 } elseif ( isset( $_GET['repair'] ) ) {
    73 
    70 
    74 	echo '<h1 class="screen-reader-text">' . __( 'Database repair results' ) . '</h1>';
    71 	echo '<h1 class="screen-reader-text">' . __( 'Database repair results' ) . '</h1>';
    75 
    72 
    76 	$optimize = 2 == $_GET['repair'];
    73 	$optimize = 2 == $_GET['repair'];
    77 	$okay = true;
    74 	$okay     = true;
    78 	$problems = array();
    75 	$problems = array();
    79 
    76 
    80 	$tables = $wpdb->tables();
    77 	$tables = $wpdb->tables();
    81 
    78 
    82 	// Sitecategories may not exist if global terms are disabled.
    79 	// Sitecategories may not exist if global terms are disabled.
    83 	$query = $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $wpdb->sitecategories ) );
    80 	$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $wpdb->sitecategories ) );
    84 	if ( is_multisite() && ! $wpdb->get_var( $query ) ) {
    81 	if ( is_multisite() && ! $wpdb->get_var( $query ) ) {
    85 		unset( $tables['sitecategories'] );
    82 		unset( $tables['sitecategories'] );
    86 	}
    83 	}
    87 
    84 
    88 	/**
    85 	/**
    89 	 * Filters additional database tables to repair.
    86 	 * Filters additional database tables to repair.
    90 	 *
    87 	 *
    91 	 * @since 3.0.0
    88 	 * @since 3.0.0
    92 	 *
    89 	 *
    93 	 * @param array $tables Array of prefixed table names to be repaired.
    90 	 * @param string[] $tables Array of prefixed table names to be repaired.
    94 	 */
    91 	 */
    95 	$tables = array_merge( $tables, (array) apply_filters( 'tables_to_repair', array() ) );
    92 	$tables = array_merge( $tables, (array) apply_filters( 'tables_to_repair', array() ) );
    96 
    93 
    97 	// Loop over the tables, checking and repairing as needed.
    94 	// Loop over the tables, checking and repairing as needed.
    98 	foreach ( $tables as $table ) {
    95 	foreach ( $tables as $table ) {
   102 		if ( 'OK' == $check->Msg_text ) {
    99 		if ( 'OK' == $check->Msg_text ) {
   103 			/* translators: %s: table name */
   100 			/* translators: %s: table name */
   104 			printf( __( 'The %s table is okay.' ), "<code>$table</code>" );
   101 			printf( __( 'The %s table is okay.' ), "<code>$table</code>" );
   105 		} else {
   102 		} else {
   106 			/* translators: 1: table name, 2: error message, */
   103 			/* translators: 1: table name, 2: error message, */
   107 			printf( __( 'The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table&hellip;' ) , "<code>$table</code>", "<code>$check->Msg_text</code>" );
   104 			printf( __( 'The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table&hellip;' ), "<code>$table</code>", "<code>$check->Msg_text</code>" );
   108 
   105 
   109 			$repair = $wpdb->get_row( "REPAIR TABLE $table" );
   106 			$repair = $wpdb->get_row( "REPAIR TABLE $table" );
   110 
   107 
   111 			echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;';
   108 			echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;';
   112 			if ( 'OK' == $check->Msg_text ) {
   109 			if ( 'OK' == $check->Msg_text ) {
   113 				/* translators: %s: table name */
   110 				/* translators: %s: table name */
   114 				printf( __( 'Successfully repaired the %s table.' ), "<code>$table</code>" );
   111 				printf( __( 'Successfully repaired the %s table.' ), "<code>$table</code>" );
   115 			} else {
   112 			} else {
   116 				/* translators: 1: table name, 2: error message, */
   113 				/* translators: 1: table name, 2: error message, */
   117 				echo sprintf( __( 'Failed to repair the %1$s table. Error: %2$s' ), "<code>$table</code>", "<code>$check->Msg_text</code>" ) . '<br />';
   114 				echo sprintf( __( 'Failed to repair the %1$s table. Error: %2$s' ), "<code>$table</code>", "<code>$check->Msg_text</code>" ) . '<br />';
   118 				$problems[$table] = $check->Msg_text;
   115 				$problems[ $table ] = $check->Msg_text;
   119 				$okay = false;
   116 				$okay               = false;
   120 			}
   117 			}
   121 		}
   118 		}
   122 
   119 
   123 		if ( $okay && $optimize ) {
   120 		if ( $okay && $optimize ) {
   124 			$check = $wpdb->get_row( "ANALYZE TABLE $table" );
   121 			$check = $wpdb->get_row( "ANALYZE TABLE $table" );
   125 
   122 
   126 			echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;';
   123 			echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;';
   127 			if ( 'Table is already up to date' == $check->Msg_text )  {
   124 			if ( 'Table is already up to date' == $check->Msg_text ) {
   128 				/* translators: %s: table name */
   125 				/* translators: %s: table name */
   129 				printf( __( 'The %s table is already optimized.' ), "<code>$table</code>" );
   126 				printf( __( 'The %s table is already optimized.' ), "<code>$table</code>" );
   130 			} else {
   127 			} else {
   131 				$check = $wpdb->get_row( "OPTIMIZE TABLE $table" );
   128 				$check = $wpdb->get_row( "OPTIMIZE TABLE $table" );
   132 
   129 
   142 		}
   139 		}
   143 		echo '</p>';
   140 		echo '</p>';
   144 	}
   141 	}
   145 
   142 
   146 	if ( $problems ) {
   143 	if ( $problems ) {
   147 		printf( '<p>' . __('Some database problems could not be repaired. Please copy-and-paste the following list of errors to the <a href="%s">WordPress support forums</a> to get additional assistance.') . '</p>', __( 'https://wordpress.org/support/forum/how-to-and-troubleshooting' ) );
   144 		printf( '<p>' . __( 'Some database problems could not be repaired. Please copy-and-paste the following list of errors to the <a href="%s">WordPress support forums</a> to get additional assistance.' ) . '</p>', __( 'https://wordpress.org/support/forum/how-to-and-troubleshooting' ) );
   148 		$problem_output = '';
   145 		$problem_output = '';
   149 		foreach ( $problems as $table => $problem )
   146 		foreach ( $problems as $table => $problem ) {
   150 			$problem_output .= "$table: $problem\n";
   147 			$problem_output .= "$table: $problem\n";
       
   148 		}
   151 		echo '<p><textarea name="errors" id="errors" rows="20" cols="60">' . esc_textarea( $problem_output ) . '</textarea></p>';
   149 		echo '<p><textarea name="errors" id="errors" rows="20" cols="60">' . esc_textarea( $problem_output ) . '</textarea></p>';
   152 	} else {
   150 	} else {
   153 		echo '<p>' . __( 'Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users.' ) . "</p><p><code>define('WP_ALLOW_REPAIR', true);</code></p>";
   151 		echo '<p>' . __( 'Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users.' ) . "</p><p><code>define('WP_ALLOW_REPAIR', true);</code></p>";
   154 	}
   152 	}
   155 } else {
   153 } else {
   156 
   154 
   157 	echo '<h1 class="screen-reader-text">' . __( 'WordPress database repair' ) . '</h1>';
   155 	echo '<h1 class="screen-reader-text">' . __( 'WordPress database repair' ) . '</h1>';
   158 
   156 
   159 	if ( isset( $_GET['referrer'] ) && 'is_blog_installed' == $_GET['referrer'] )
   157 	if ( isset( $_GET['referrer'] ) && 'is_blog_installed' == $_GET['referrer'] ) {
   160 		echo '<p>' . __( 'One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the &#8220;Repair Database&#8221; button. Repairing can take a while, so please be patient.' ) . '</p>';
   158 		echo '<p>' . __( 'One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the &#8220;Repair Database&#8221; button. Repairing can take a while, so please be patient.' ) . '</p>';
   161 	else
   159 	} else {
   162 		echo '<p>' . __( 'WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient.' ) . '</p>';
   160 		echo '<p>' . __( 'WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient.' ) . '</p>';
   163 ?>
   161 	}
       
   162 	?>
   164 	<p class="step"><a class="button button-large" href="repair.php?repair=1"><?php _e( 'Repair Database' ); ?></a></p>
   163 	<p class="step"><a class="button button-large" href="repair.php?repair=1"><?php _e( 'Repair Database' ); ?></a></p>
   165 	<p><?php _e( 'WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing.' ); ?></p>
   164 	<p><?php _e( 'WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing.' ); ?></p>
   166 	<p class="step"><a class="button button-large" href="repair.php?repair=2"><?php _e( 'Repair and Optimize Database' ); ?></a></p>
   165 	<p class="step"><a class="button button-large" href="repair.php?repair=2"><?php _e( 'Repair and Optimize Database' ); ?></a></p>
   167 <?php
   166 	<?php
   168 }
   167 }
   169 ?>
   168 ?>
   170 </body>
   169 </body>
   171 </html>
   170 </html>