/wp-admin/maint/repair.php

  1. <?php 
  2. /** 
  3. * Database Repair and Optimization Script. 
  4. * 
  5. * @package WordPress 
  6. * @subpackage Database 
  7. */ 
  8. define('WP_REPAIRING', true); 
  9.  
  10. require_once( dirname( dirname( dirname( __FILE__ ) ) ) . '/wp-load.php' ); 
  11.  
  12. header( 'Content-Type: text/html; charset=utf-8' ); 
  13. ?> 
  14. <!DOCTYPE html> 
  15. <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> 
  16. <head> 
  17. <meta name="viewport" content="width=device-width" /> 
  18. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  19. <meta name="robots" content="noindex, nofollow" /> 
  20. <title><?php _e( 'WordPress › Database Repair' ); ?></title> 
  21. <?php 
  22. wp_admin_css( 'install', true ); 
  23. ?> 
  24. </head> 
  25. <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> 
  27.  
  28. <?php 
  29.  
  30. if ( ! defined( 'WP_ALLOW_REPAIR' ) ) { 
  31.  
  32. echo '<h1 class="screen-reader-text">' . __( 'Allow automatic database repair' ) . '</h1>'; 
  33.  
  34. echo '<p>'; 
  35. printf( 
  36. /** translators: %s: wp-config.php */ 
  37. __( 'To allow use of this page to automatically repair database problems, please add the following line to your %s file. Once this line is added to your config, reload this page.' ),  
  38. '<code>wp-config.php</code>' 
  39. ); 
  40. echo "</p><p><code>define('WP_ALLOW_REPAIR', true);</code></p>"; 
  41.  
  42. $default_key = 'put your unique phrase here'; 
  43. $missing_key = false; 
  44. $duplicated_keys = array(); 
  45.  
  46. foreach ( array( 'AUTH_KEY', 'SECURE_AUTH_KEY', 'LOGGED_IN_KEY', 'NONCE_KEY', 'AUTH_SALT', 'SECURE_AUTH_SALT', 'LOGGED_IN_SALT', 'NONCE_SALT' ) as $key ) { 
  47. if ( defined( $key ) ) { 
  48. // Check for unique values of each key. 
  49. $duplicated_keys[ constant( $key ) ] = isset( $duplicated_keys[ constant( $key ) ] ); 
  50. } else { 
  51. // If a constant is not defined, it's missing. 
  52. $missing_key = true; 
  53.  
  54. // If at least one key uses the default value, consider it duplicated. 
  55. if ( isset( $duplicated_keys[ $default_key ] ) ) { 
  56. $duplicated_keys[ $default_key ] = true; 
  57.  
  58. // Weed out all unique, non-default values. 
  59. $duplicated_keys = array_filter( $duplicated_keys ); 
  60.  
  61. if ( $duplicated_keys || $missing_key ) { 
  62.  
  63. echo '<h2 class="screen-reader-text">' . __( 'Check secret keys' ) . '</h2>'; 
  64.  
  65. // Translators: 1: wp-config.php; 2: Secret key service URL. 
  66. 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.  
  68. } elseif ( isset( $_GET['repair'] ) ) { 
  69.  
  70. echo '<h1 class="screen-reader-text">' . __( 'Database repair results' ) . '</h1>'; 
  71.  
  72. $optimize = 2 == $_GET['repair']; 
  73. $okay = true; 
  74. $problems = array(); 
  75.  
  76. $tables = $wpdb->tables(); 
  77.  
  78. // Sitecategories may not exist if global terms are disabled. 
  79. $query = $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $wpdb->sitecategories ) ); 
  80. if ( is_multisite() && ! $wpdb->get_var( $query ) ) { 
  81. unset( $tables['sitecategories'] ); 
  82.  
  83. /** 
  84. * Filters additional database tables to repair. 
  85. * 
  86. * @since 3.0.0 
  87. * 
  88. * @param array $tables Array of prefixed table names to be repaired. 
  89. */ 
  90. $tables = array_merge( $tables, (array) apply_filters( 'tables_to_repair', array() ) ); 
  91.  
  92. // Loop over the tables, checking and repairing as needed. 
  93. foreach ( $tables as $table ) { 
  94. $check = $wpdb->get_row( "CHECK TABLE $table" ); 
  95.  
  96. echo '<p>'; 
  97. if ( 'OK' == $check->Msg_text ) { 
  98. /** translators: %s: table name */ 
  99. printf( __( 'The %s table is okay.' ), "<code>$table</code>" ); 
  100. } else { 
  101. /** translators: 1: table name, 2: error message, */ 
  102. printf( __( 'The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table…' ) , "<code>$table</code>", "<code>$check->Msg_text</code>" ); 
  103.  
  104. $repair = $wpdb->get_row( "REPAIR TABLE $table" ); 
  105.  
  106. echo '<br />    '; 
  107. if ( 'OK' == $check->Msg_text ) { 
  108. /** translators: %s: table name */ 
  109. printf( __( 'Successfully repaired the %s table.' ), "<code>$table</code>" ); 
  110. } else { 
  111. /** translators: 1: table name, 2: error message, */ 
  112. echo sprintf( __( 'Failed to repair the %1$s table. Error: %2$s' ), "<code>$table</code>", "<code>$check->Msg_text</code>" ) . '<br />'; 
  113. $problems[$table] = $check->Msg_text; 
  114. $okay = false; 
  115.  
  116. if ( $okay && $optimize ) { 
  117. $check = $wpdb->get_row( "ANALYZE TABLE $table" ); 
  118.  
  119. echo '<br />    '; 
  120. if ( 'Table is already up to date' == $check->Msg_text ) { 
  121. /** translators: %s: table name */ 
  122. printf( __( 'The %s table is already optimized.' ), "<code>$table</code>" ); 
  123. } else { 
  124. $check = $wpdb->get_row( "OPTIMIZE TABLE $table" ); 
  125.  
  126. echo '<br />    '; 
  127. if ( 'OK' == $check->Msg_text || 'Table is already up to date' == $check->Msg_text ) { 
  128. /** translators: %s: table name */ 
  129. printf( __( 'Successfully optimized the %s table.' ), "<code>$table</code>" ); 
  130. } else { 
  131. /** translators: 1: table name, 2: error message, */ 
  132. printf( __( 'Failed to optimize the %1$s table. Error: %2$s' ), "<code>$table</code>", "<code>$check->Msg_text</code>" ); 
  133. echo '</p>'; 
  134.  
  135. if ( $problems ) { 
  136. 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' ) ); 
  137. $problem_output = ''; 
  138. foreach ( $problems as $table => $problem ) 
  139. $problem_output .= "$table: $problem\n"; 
  140. echo '<p><textarea name="errors" id="errors" rows="20" cols="60">' . esc_textarea( $problem_output ) . '</textarea></p>'; 
  141. } else { 
  142. 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>"; 
  143. } else { 
  144.  
  145. echo '<h1 class="screen-reader-text">' . __( 'WordPress database repair' ) . '</h1>'; 
  146.  
  147. if ( isset( $_GET['referrer'] ) && 'is_blog_installed' == $_GET['referrer'] ) 
  148. echo '<p>' . __( 'One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the “Repair Database” button. Repairing can take a while, so please be patient.' ) . '</p>'; 
  149. else 
  150. echo '<p>' . __( 'WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient.' ) . '</p>'; 
  151. ?> 
  152. <p class="step"><a class="button button-large" href="repair.php?repair=1"><?php _e( 'Repair Database' ); ?></a></p> 
  153. <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> 
  154. <p class="step"><a class="button button-large" href="repair.php?repair=2"><?php _e( 'Repair and Optimize Database' ); ?></a></p> 
  155. <?php 
  156. ?> 
  157. </body> 
  158. </html> 
.