wp/wp-admin/setup-config.php
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
     2 /**
     2 /**
     3  * Retrieves and creates the wp-config.php file.
     3  * Retrieves and creates the wp-config.php file.
     4  *
     4  *
     5  * The permissions for the base directory must allow for writing files in order
     5  * The permissions for the base directory must allow for writing files in order
     6  * for the wp-config.php to be created using this page.
     6  * for the wp-config.php to be created using this page.
     7  *
       
     8  * @internal This file must be parsable by PHP4.
       
     9  *
     7  *
    10  * @package WordPress
     8  * @package WordPress
    11  * @subpackage Administration
     9  * @subpackage Administration
    12  */
    10  */
    13 
    11 
    26  *
    24  *
    27  * Set this to error_reporting( -1 ) for debugging
    25  * Set this to error_reporting( -1 ) for debugging
    28  */
    26  */
    29 error_reporting(0);
    27 error_reporting(0);
    30 
    28 
    31 define( 'ABSPATH', dirname( dirname( __FILE__ ) ) . '/' );
    29 if ( ! defined( 'ABSPATH' ) ) {
       
    30 	define( 'ABSPATH', dirname( dirname( __FILE__ ) ) . '/' );
       
    31 }
    32 
    32 
    33 require( ABSPATH . 'wp-settings.php' );
    33 require( ABSPATH . 'wp-settings.php' );
    34 
    34 
    35 /** Load WordPress Administration Upgrade API */
    35 /** Load WordPress Administration Upgrade API */
    36 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    36 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    37 
    37 
    38 /** Load WordPress Translation Install API */
    38 /** Load WordPress Translation Installation API */
    39 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
    39 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
    40 
    40 
    41 nocache_headers();
    41 nocache_headers();
    42 
    42 
    43 // Support wp-config-sample.php one level up, for the develop repo.
    43 // Support wp-config-sample.php one level up, for the develop repo.
    44 if ( file_exists( ABSPATH . 'wp-config-sample.php' ) )
    44 if ( file_exists( ABSPATH . 'wp-config-sample.php' ) ) {
    45 	$config_file = file( ABSPATH . 'wp-config-sample.php' );
    45 	$config_file = file( ABSPATH . 'wp-config-sample.php' );
    46 elseif ( file_exists( dirname( ABSPATH ) . '/wp-config-sample.php' ) )
    46 } elseif ( file_exists( dirname( ABSPATH ) . '/wp-config-sample.php' ) ) {
    47 	$config_file = file( dirname( ABSPATH ) . '/wp-config-sample.php' );
    47 	$config_file = file( dirname( ABSPATH ) . '/wp-config-sample.php' );
    48 else
    48 } else {
    49 	wp_die( __( 'Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file from your WordPress installation.' ) );
    49 	wp_die( sprintf(
       
    50 		/* translators: %s: wp-config-sample.php */
       
    51 		__( 'Sorry, I need a %s file to work from. Please re-upload this file to your WordPress installation.' ),
       
    52 		'<code>wp-config-sample.php</code>'
       
    53 	) );
       
    54 }
    50 
    55 
    51 // Check if wp-config.php has been created
    56 // Check if wp-config.php has been created
    52 if ( file_exists( ABSPATH . 'wp-config.php' ) )
    57 if ( file_exists( ABSPATH . 'wp-config.php' ) ) {
    53 	wp_die( '<p>' . sprintf( __( "The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='%s'>installing now</a>." ), 'install.php' ) . '</p>' );
    58 	wp_die( '<p>' . sprintf(
    54 
    59 			/* translators: 1: wp-config.php 2: install.php */
    55 // Check if wp-config.php exists above the root directory but is not part of another install
    60 			__( 'The file %1$s already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href="%2$s">installing now</a>.' ),
    56 if ( file_exists(ABSPATH . '../wp-config.php' ) && ! file_exists( ABSPATH . '../wp-settings.php' ) )
    61 			'<code>wp-config.php</code>',
    57 	wp_die( '<p>' . sprintf( __( "The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>."), 'install.php' ) . '</p>' );
    62 			'install.php'
       
    63 		) . '</p>'
       
    64 	);
       
    65 }
       
    66 
       
    67 // Check if wp-config.php exists above the root directory but is not part of another installation
       
    68 if ( @file_exists( ABSPATH . '../wp-config.php' ) && ! @file_exists( ABSPATH . '../wp-settings.php' ) ) {
       
    69 	wp_die( '<p>' . sprintf(
       
    70 			/* translators: 1: wp-config.php 2: install.php */
       
    71 			__( 'The file %1$s already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href="%2$s">installing now</a>.' ),
       
    72 			'<code>wp-config.php</code>',
       
    73 			'install.php'
       
    74 		) . '</p>'
       
    75 	);
       
    76 }
    58 
    77 
    59 $step = isset( $_GET['step'] ) ? (int) $_GET['step'] : -1;
    78 $step = isset( $_GET['step'] ) ? (int) $_GET['step'] : -1;
    60 
    79 
    61 /**
    80 /**
    62  * Display setup wp-config.php file header.
    81  * Display setup wp-config.php file header.
    63  *
    82  *
    64  * @ignore
    83  * @ignore
    65  * @since 2.3.0
    84  * @since 2.3.0
       
    85  *
       
    86  * @global string    $wp_local_package
       
    87  * @global WP_Locale $wp_locale
       
    88  *
       
    89  * @param string|array $body_classes
    66  */
    90  */
    67 function setup_config_display_header( $body_classes = array() ) {
    91 function setup_config_display_header( $body_classes = array() ) {
    68 	global $wp_version;
       
    69 	$body_classes = (array) $body_classes;
    92 	$body_classes = (array) $body_classes;
    70 	$body_classes[] = 'wp-core-ui';
    93 	$body_classes[] = 'wp-core-ui';
    71 	if ( is_rtl() ) {
    94 	if ( is_rtl() ) {
    72 		$body_classes[] = 'rtl';
    95 		$body_classes[] = 'rtl';
    73 	}
    96 	}
    77 <!DOCTYPE html>
   100 <!DOCTYPE html>
    78 <html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>>
   101 <html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>>
    79 <head>
   102 <head>
    80 	<meta name="viewport" content="width=device-width" />
   103 	<meta name="viewport" content="width=device-width" />
    81 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   104 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       
   105 	<meta name="robots" content="noindex,nofollow" />
    82 	<title><?php _e( 'WordPress &rsaquo; Setup Configuration File' ); ?></title>
   106 	<title><?php _e( 'WordPress &rsaquo; Setup Configuration File' ); ?></title>
    83 	<?php wp_admin_css( 'install', true ); ?>
   107 	<?php wp_admin_css( 'install', true ); ?>
    84 </head>
   108 </head>
    85 <body class="<?php echo implode( ' ', $body_classes ); ?>">
   109 <body class="<?php echo implode( ' ', $body_classes ); ?>">
    86 <h1 id="logo"><a href="<?php esc_attr_e( 'https://wordpress.org/' ); ?>" tabindex="-1"><?php _e( 'WordPress' ); ?></a></h1>
   110 <p id="logo"><a href="<?php echo esc_url( __( 'https://wordpress.org/' ) ); ?>" tabindex="-1"><?php _e( 'WordPress' ); ?></a></p>
    87 <?php
   111 <?php
    88 } // end function setup_config_display_header();
   112 } // end function setup_config_display_header();
    89 
   113 
    90 $language = '';
   114 $language = '';
    91 if ( ! empty( $_REQUEST['language'] ) ) {
   115 if ( ! empty( $_REQUEST['language'] ) ) {
    92 	$language = preg_replace( '/[^a-zA-Z_]/', '', $_REQUEST['language'] );
   116 	$language = preg_replace( '/[^a-zA-Z0-9_]/', '', $_REQUEST['language'] );
    93 } elseif ( isset( $GLOBALS['wp_local_package'] ) ) {
   117 } elseif ( isset( $GLOBALS['wp_local_package'] ) ) {
    94 	$language = $GLOBALS['wp_local_package'];
   118 	$language = $GLOBALS['wp_local_package'];
    95 }
   119 }
    96 
   120 
    97 switch($step) {
   121 switch($step) {
    98 	case -1:
   122 	case -1:
    99 		if ( wp_can_install_language_pack() && empty( $language ) && ( $languages = wp_get_available_translations() ) ) {
   123 		if ( wp_can_install_language_pack() && empty( $language ) && ( $languages = wp_get_available_translations() ) ) {
   100 			setup_config_display_header( 'language-chooser' );
   124 			setup_config_display_header( 'language-chooser' );
       
   125 			echo '<h1 class="screen-reader-text">Select a default language</h1>';
   101 			echo '<form id="setup" method="post" action="?step=0">';
   126 			echo '<form id="setup" method="post" action="?step=0">';
   102 			wp_install_language_form( $languages );
   127 			wp_install_language_form( $languages );
   103 			echo '</form>';
   128 			echo '</form>';
   104 			break;
   129 			break;
   105 		}
   130 		}
   122 		}
   147 		}
   123 		if ( ! empty( $loaded_language ) ) {
   148 		if ( ! empty( $loaded_language ) ) {
   124 			$step_1 .= '&amp;language=' . $loaded_language;
   149 			$step_1 .= '&amp;language=' . $loaded_language;
   125 		}
   150 		}
   126 ?>
   151 ?>
   127 
   152 <h1 class="screen-reader-text"><?php _e( 'Before getting started' ) ?></h1>
   128 <p><?php _e( 'Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.' ) ?></p>
   153 <p><?php _e( 'Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.' ) ?></p>
   129 <ol>
   154 <ol>
   130 	<li><?php _e( 'Database name' ); ?></li>
   155 	<li><?php _e( 'Database name' ); ?></li>
   131 	<li><?php _e( 'Database username' ); ?></li>
   156 	<li><?php _e( 'Database username' ); ?></li>
   132 	<li><?php _e( 'Database password' ); ?></li>
   157 	<li><?php _e( 'Database password' ); ?></li>
   133 	<li><?php _e( 'Database host' ); ?></li>
   158 	<li><?php _e( 'Database host' ); ?></li>
   134 	<li><?php _e( 'Table prefix (if you want to run more than one WordPress in a single database)' ); ?></li>
   159 	<li><?php _e( 'Table prefix (if you want to run more than one WordPress in a single database)' ); ?></li>
   135 </ol>
   160 </ol>
   136 <p>
   161 <p><?php
   137 	<?php _e( 'We&#8217;re going to use this information to create a <code>wp-config.php</code> file.' ); ?>
   162 	/* translators: %s: wp-config.php */
   138 	<strong><?php _e( "If for any reason this automatic file creation doesn&#8217;t work, don&#8217;t worry. All this does is fill in the database information to a configuration file. You may also simply open <code>wp-config-sample.php</code> in a text editor, fill in your information, and save it as <code>wp-config.php</code>." ); ?></strong>
   163 	printf( __( 'We&#8217;re going to use this information to create a %s file.' ),
   139 	<?php _e( "Need more help? <a href='https://codex.wordpress.org/Editing_wp-config.php'>We got it</a>." ); ?>
   164 		'<code>wp-config.php</code>'
   140 </p>
   165 	);
   141 <p><?php _e( "In all likelihood, these items were supplied to you by your Web Host. If you do not have this information, then you will need to contact them before you can continue. If you&#8217;re all ready&hellip;" ); ?></p>
   166 	?>
       
   167 	<strong><?php
       
   168 		/* translators: 1: wp-config-sample.php, 2: wp-config.php */
       
   169 		printf( __( 'If for any reason this automatic file creation doesn&#8217;t work, don&#8217;t worry. All this does is fill in the database information to a configuration file. You may also simply open %1$s in a text editor, fill in your information, and save it as %2$s.' ),
       
   170 			'<code>wp-config-sample.php</code>',
       
   171 			'<code>wp-config.php</code>'
       
   172 		);
       
   173 	?></strong>
       
   174 	<?php
       
   175 	/* translators: %s: Codex URL */
       
   176 	printf( __( 'Need more help? <a href="%s">We got it</a>.' ),
       
   177 		__( 'https://codex.wordpress.org/Editing_wp-config.php' )
       
   178 	);
       
   179 ?></p>
       
   180 <p><?php _e( 'In all likelihood, these items were supplied to you by your Web Host. If you don&#8217;t have this information, then you will need to contact them before you can continue. If you&#8217;re all ready&hellip;' ); ?></p>
   142 
   181 
   143 <p class="step"><a href="<?php echo $step_1; ?>" class="button button-large"><?php _e( 'Let&#8217;s go!' ); ?></a></p>
   182 <p class="step"><a href="<?php echo $step_1; ?>" class="button button-large"><?php _e( 'Let&#8217;s go!' ); ?></a></p>
   144 <?php
   183 <?php
   145 	break;
   184 	break;
   146 
   185 
   148 		load_default_textdomain( $language );
   187 		load_default_textdomain( $language );
   149 		$GLOBALS['wp_locale'] = new WP_Locale();
   188 		$GLOBALS['wp_locale'] = new WP_Locale();
   150 
   189 
   151 		setup_config_display_header();
   190 		setup_config_display_header();
   152 	?>
   191 	?>
       
   192 <h1 class="screen-reader-text"><?php _e( 'Set up your database connection' ) ?></h1>
   153 <form method="post" action="setup-config.php?step=2">
   193 <form method="post" action="setup-config.php?step=2">
   154 	<p><?php _e( "Below you should enter your database connection details. If you&#8217;re not sure about these, contact your host." ); ?></p>
   194 	<p><?php _e( 'Below you should enter your database connection details. If you&#8217;re not sure about these, contact your host.' ); ?></p>
   155 	<table class="form-table">
   195 	<table class="form-table">
   156 		<tr>
   196 		<tr>
   157 			<th scope="row"><label for="dbname"><?php _e( 'Database Name' ); ?></label></th>
   197 			<th scope="row"><label for="dbname"><?php _e( 'Database Name' ); ?></label></th>
   158 			<td><input name="dbname" id="dbname" type="text" size="25" value="wordpress" /></td>
   198 			<td><input name="dbname" id="dbname" type="text" size="25" value="wordpress" /></td>
   159 			<td><?php _e( 'The name of the database you want to run WP in.' ); ?></td>
   199 			<td><?php _e( 'The name of the database you want to use with WordPress.' ); ?></td>
   160 		</tr>
   200 		</tr>
   161 		<tr>
   201 		<tr>
   162 			<th scope="row"><label for="uname"><?php _e( 'User Name' ); ?></label></th>
   202 			<th scope="row"><label for="uname"><?php _e( 'Username' ); ?></label></th>
   163 			<td><input name="uname" id="uname" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'username', 'example username' ), ENT_QUOTES ); ?>" /></td>
   203 			<td><input name="uname" id="uname" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'username', 'example username' ), ENT_QUOTES ); ?>" /></td>
   164 			<td><?php _e( 'Your MySQL username' ); ?></td>
   204 			<td><?php _e( 'Your database username.' ); ?></td>
   165 		</tr>
   205 		</tr>
   166 		<tr>
   206 		<tr>
   167 			<th scope="row"><label for="pwd"><?php _e( 'Password' ); ?></label></th>
   207 			<th scope="row"><label for="pwd"><?php _e( 'Password' ); ?></label></th>
   168 			<td><input name="pwd" id="pwd" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'password', 'example password' ), ENT_QUOTES ); ?>" autocomplete="off" /></td>
   208 			<td><input name="pwd" id="pwd" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'password', 'example password' ), ENT_QUOTES ); ?>" autocomplete="off" /></td>
   169 			<td><?php _e( '&hellip;and your MySQL password.' ); ?></td>
   209 			<td><?php _e( 'Your database password.' ); ?></td>
   170 		</tr>
   210 		</tr>
   171 		<tr>
   211 		<tr>
   172 			<th scope="row"><label for="dbhost"><?php _e( 'Database Host' ); ?></label></th>
   212 			<th scope="row"><label for="dbhost"><?php _e( 'Database Host' ); ?></label></th>
   173 			<td><input name="dbhost" id="dbhost" type="text" size="25" value="localhost" /></td>
   213 			<td><input name="dbhost" id="dbhost" type="text" size="25" value="localhost" /></td>
   174 			<td><?php _e( 'You should be able to get this info from your web host, if <code>localhost</code> does not work.' ); ?></td>
   214 			<td><?php
       
   215 				/* translators: %s: localhost */
       
   216 				printf( __( 'You should be able to get this info from your web host, if %s doesn&#8217;t work.' ),'<code>localhost</code>' );
       
   217 			?></td>
   175 		</tr>
   218 		</tr>
   176 		<tr>
   219 		<tr>
   177 			<th scope="row"><label for="prefix"><?php _e( 'Table Prefix' ); ?></label></th>
   220 			<th scope="row"><label for="prefix"><?php _e( 'Table Prefix' ); ?></label></th>
   178 			<td><input name="prefix" id="prefix" type="text" value="wp_" size="25" /></td>
   221 			<td><input name="prefix" id="prefix" type="text" value="wp_" size="25" /></td>
   179 			<td><?php _e( 'If you want to run multiple WordPress installations in a single database, change this.' ); ?></td>
   222 			<td><?php _e( 'If you want to run multiple WordPress installations in a single database, change this.' ); ?></td>
   239 	$wpdb->db_connect();
   282 	$wpdb->db_connect();
   240 
   283 
   241 	if ( ! empty( $wpdb->error ) )
   284 	if ( ! empty( $wpdb->error ) )
   242 		wp_die( $wpdb->error->get_error_message() . $tryagain_link );
   285 		wp_die( $wpdb->error->get_error_message() . $tryagain_link );
   243 
   286 
   244 	// Fetch or generate keys and salts.
   287 	$errors = $wpdb->hide_errors();
   245 	$no_api = isset( $_POST['noapi'] );
   288 	$wpdb->query( "SELECT $prefix" );
   246 	if ( ! $no_api ) {
   289 	$wpdb->show_errors( $errors );
   247 		$secret_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
   290 	if ( ! $wpdb->last_error ) {
   248 	}
   291 		// MySQL was able to parse the prefix as a value, which we don't want. Bail.
   249 
   292 		wp_die( __( '<strong>ERROR</strong>: "Table Prefix" is invalid.' ) );
   250 	if ( $no_api || is_wp_error( $secret_keys ) ) {
   293 	}
   251 		$secret_keys = array();
   294 
       
   295 	// Generate keys and salts using secure CSPRNG; fallback to API if enabled; further fallback to original wp_generate_password().
       
   296 	try {
       
   297 		$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
       
   298 		$max = strlen($chars) - 1;
   252 		for ( $i = 0; $i < 8; $i++ ) {
   299 		for ( $i = 0; $i < 8; $i++ ) {
   253 			$secret_keys[] = wp_generate_password( 64, true, true );
   300 			$key = '';
   254 		}
   301 			for ( $j = 0; $j < 64; $j++ ) {
   255 	} else {
   302 				$key .= substr( $chars, random_int( 0, $max ), 1 );
   256 		$secret_keys = explode( "\n", wp_remote_retrieve_body( $secret_keys ) );
   303 			}
   257 		foreach ( $secret_keys as $k => $v ) {
   304 			$secret_keys[] = $key;
   258 			$secret_keys[$k] = substr( $v, 28, 64 );
   305 		}
       
   306 	} catch ( Exception $ex ) {
       
   307 		$no_api = isset( $_POST['noapi'] );
       
   308 
       
   309 		if ( ! $no_api ) {
       
   310 			$secret_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
       
   311 		}
       
   312 
       
   313 		if ( $no_api || is_wp_error( $secret_keys ) ) {
       
   314 			$secret_keys = array();
       
   315 			for ( $i = 0; $i < 8; $i++ ) {
       
   316 				$secret_keys[] = wp_generate_password( 64, true, true );
       
   317 			}
       
   318 		} else {
       
   319 			$secret_keys = explode( "\n", wp_remote_retrieve_body( $secret_keys ) );
       
   320 			foreach ( $secret_keys as $k => $v ) {
       
   321 				$secret_keys[$k] = substr( $v, 28, 64 );
       
   322 			}
   259 		}
   323 		}
   260 	}
   324 	}
   261 
   325 
   262 	$key = 0;
   326 	$key = 0;
   263 	// Not a PHP5-style by-reference foreach, as this file must be parseable by PHP4.
       
   264 	foreach ( $config_file as $line_num => $line ) {
   327 	foreach ( $config_file as $line_num => $line ) {
   265 		if ( '$table_prefix  =' == substr( $line, 0, 16 ) ) {
   328 		if ( '$table_prefix  =' == substr( $line, 0, 16 ) ) {
   266 			$config_file[ $line_num ] = '$table_prefix  = \'' . addcslashes( $prefix, "\\'" ) . "';\r\n";
   329 			$config_file[ $line_num ] = '$table_prefix  = \'' . addcslashes( $prefix, "\\'" ) . "';\r\n";
   267 			continue;
   330 			continue;
   268 		}
   331 		}
   300 	unset( $line );
   363 	unset( $line );
   301 
   364 
   302 	if ( ! is_writable(ABSPATH) ) :
   365 	if ( ! is_writable(ABSPATH) ) :
   303 		setup_config_display_header();
   366 		setup_config_display_header();
   304 ?>
   367 ?>
   305 <p><?php _e( "Sorry, but I can&#8217;t write the <code>wp-config.php</code> file." ); ?></p>
   368 <p><?php
   306 <p><?php _e( 'You can create the <code>wp-config.php</code> manually and paste the following text into it.' ); ?></p>
   369 	/* translators: %s: wp-config.php */
       
   370 	printf( __( 'Sorry, but I can&#8217;t write the %s file.' ), '<code>wp-config.php</code>' );
       
   371 ?></p>
       
   372 <p><?php
       
   373 	/* translators: %s: wp-config.php */
       
   374 	printf( __( 'You can create the %s file manually and paste the following text into it.' ), '<code>wp-config.php</code>' );
       
   375 ?></p>
   307 <textarea id="wp-config" cols="98" rows="15" class="code" readonly="readonly"><?php
   376 <textarea id="wp-config" cols="98" rows="15" class="code" readonly="readonly"><?php
   308 		foreach( $config_file as $line ) {
   377 		foreach ( $config_file as $line ) {
   309 			echo htmlentities($line, ENT_COMPAT, 'UTF-8');
   378 			echo htmlentities($line, ENT_COMPAT, 'UTF-8');
   310 		}
   379 		}
   311 ?></textarea>
   380 ?></textarea>
   312 <p><?php _e( 'After you&#8217;ve done that, click &#8220;Run the install.&#8221;' ); ?></p>
   381 <p><?php _e( 'After you&#8217;ve done that, click &#8220;Run the installation.&#8221;' ); ?></p>
   313 <p class="step"><a href="<?php echo $install; ?>" class="button button-large"><?php _e( 'Run the install' ); ?></a></p>
   382 <p class="step"><a href="<?php echo $install; ?>" class="button button-large"><?php _e( 'Run the installation' ); ?></a></p>
   314 <script>
   383 <script>
   315 (function(){
   384 (function(){
   316 if ( ! /iPad|iPod|iPhone/.test( navigator.userAgent ) ) {
   385 if ( ! /iPad|iPod|iPhone/.test( navigator.userAgent ) ) {
   317 	var el = document.getElementById('wp-config');
   386 	var el = document.getElementById('wp-config');
   318 	el.focus();
   387 	el.focus();
   330 			$path_to_wp_config = ABSPATH . 'wp-config.php';
   399 			$path_to_wp_config = ABSPATH . 'wp-config.php';
   331 		else
   400 		else
   332 			$path_to_wp_config = dirname( ABSPATH ) . '/wp-config.php';
   401 			$path_to_wp_config = dirname( ABSPATH ) . '/wp-config.php';
   333 
   402 
   334 		$handle = fopen( $path_to_wp_config, 'w' );
   403 		$handle = fopen( $path_to_wp_config, 'w' );
   335 		foreach( $config_file as $line ) {
   404 		foreach ( $config_file as $line ) {
   336 			fwrite( $handle, $line );
   405 			fwrite( $handle, $line );
   337 		}
   406 		}
   338 		fclose( $handle );
   407 		fclose( $handle );
   339 		chmod( $path_to_wp_config, 0666 );
   408 		chmod( $path_to_wp_config, 0666 );
   340 		setup_config_display_header();
   409 		setup_config_display_header();
   341 ?>
   410 ?>
   342 <p><?php _e( "All right, sparky! You&#8217;ve made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to&hellip;" ); ?></p>
   411 <h1 class="screen-reader-text"><?php _e( 'Successful database connection' ) ?></h1>
   343 
   412 <p><?php _e( 'All right, sparky! You&#8217;ve made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to&hellip;' ); ?></p>
   344 <p class="step"><a href="<?php echo $install; ?>" class="button button-large"><?php _e( 'Run the install' ); ?></a></p>
   413 
       
   414 <p class="step"><a href="<?php echo $install; ?>" class="button button-large"><?php _e( 'Run the installation' ); ?></a></p>
   345 <?php
   415 <?php
   346 	endif;
   416 	endif;
   347 	break;
   417 	break;
   348 }
   418 }
   349 ?>
   419 ?>