Beispiel #1
0
 /**
  * Connect to and select database.
  *
  * If $allow_bail is false, the lack of database connection will need
  * to be handled manually. 
  *
  * @since 3.0.0
  * @since 3.9.0 $allow_bail parameter added. 
  *
  * @param bool $allow_bail Optional. Allows the function to bail. Default true.
  *
  * @return bool True with a successful connection, false on failure.
  */
 public function db_connect($allow_bail = true)
 {
     if (!$this->dbh) {
         return false;
     }
     $this->is_mysql = $this->dbh->is_mysql();
     if (false !== strpos($this->dbhost, ':')) {
         list($host, $port) = explode(':', $this->dbhost);
     } else {
         $host = $this->dbhost;
         $port = 3306;
     }
     $options = array();
     $options['key'] = defined('DB_SSL_KEY') ? DB_SSL_KEY : null;
     $options['cert'] = defined('DB_SSL_CERT') ? DB_SSL_CERT : null;
     $options['ca'] = defined('DB_SSL_CA') ? DB_SSL_CA : null;
     $options['ca_path'] = defined('DB_SSL_CA_PATH') ? DB_SSL_CA_PATH : null;
     $options['cipher'] = defined('DB_SSL_CIPHER') ? DB_SSL_CIPHER : null;
     $is_connected = $this->dbh->connect($host, $this->dbuser, $this->dbpassword, $port, $options);
     if (!$is_connected && !$this->dbh instanceof wpdb_driver_mysql) {
         $this->dbh = null;
         $attempt_fallback = true;
         if ($this->has_connected) {
             $attempt_fallback = false;
         } elseif (defined('WP_USE_EXT_MYSQL') && !WP_USE_EXT_MYSQL) {
             $attempt_fallback = false;
         }
         $drivers = WP_DB_Driver_Config::get_drivers();
         $driver = 'wpdb_driver_mysql';
         include_once $drivers[$driver];
         if ($attempt_fallback && call_user_func(array($driver, 'is_supported'))) {
             $this->dbh = new $driver();
             return $this->db_connect($allow_bail);
         }
     }
     if (!$is_connected && $allow_bail) {
         wp_load_translations_early();
         // Load custom DB error template, if present.
         if (file_exists(WP_CONTENT_DIR . '/db-error.php')) {
             require_once WP_CONTENT_DIR . '/db-error.php';
             die;
         }
         $message = '<h1>' . __('Error establishing a database connection') . "</h1>\n";
         $message .= '<p>' . sprintf(__('This either means that the username and password information in your %1$s file is incorrect or we can&#8217;t contact the database server at %2$s. This could mean your host&#8217;s database server is down.'), '<code>wp-config.php</code>', '<code>' . htmlspecialchars($this->dbhost, ENT_QUOTES) . '</code>') . "</p>\n";
         $message .= "<ul>\n";
         $message .= '<li>' . __('Are you sure you have the correct username and password?') . "</li>\n";
         $message .= '<li>' . __('Are you sure that you have typed the correct hostname?') . "</li>\n";
         $message .= '<li>' . __('Are you sure that the database server is running?') . "</li>\n";
         $message .= "</ul>\n";
         $message .= '<p>' . sprintf(__('If you&#8217;re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href="%s">WordPress Support Forums</a>.'), __('https://wordpress.org/support/')) . "</p>\n";
         $this->bail($message, 'db_connect_fail');
         return false;
     } elseif ($is_connected) {
         $this->has_connected = true;
         $this->ready = true;
         $this->set_charset($this->dbh);
         $this->set_sql_mode();
         $this->select($this->dbname, $this->dbh);
         return true;
     }
     return false;
 }