gcdb::check_connection()
最后更新于:2021-11-26 07:57:24
gcdb::check_connection( bool$allow_bail=true)Checks that the connection to the database is still up. If not, try to reconnect.
参数
- $allow_bail
-
(bool) (Optional) Allows the function to bail.
Default value: true
响应
(bool|void) True if the connection is up.
源文件
文件: gc-includes/gc-db.php
public function check_connection( $allow_bail = true ) {
if ( $this->use_mysqli ) {
if ( ! empty( $this->dbh ) && mysqli_ping( $this->dbh ) ) {
return true;
}
} else {
if ( ! empty( $this->dbh ) && mysql_ping( $this->dbh ) ) {
return true;
}
}
$error_reporting = false;
// Disable warnings, as we don't want to see a multitude of "unable to connect" messages.
if ( GC_DEBUG ) {
$error_reporting = error_reporting();
error_reporting( $error_reporting & ~E_WARNING );
}
for ( $tries = 1; $tries <= $this->reconnect_retries; $tries++ ) {
// On the last try, re-enable warnings. We want to see a single instance
// of the "unable to connect" message on the bail() screen, if it appears.
if ( $this->reconnect_retries === $tries && GC_DEBUG ) {
error_reporting( $error_reporting );
}
if ( $this->db_connect( false ) ) {
if ( $error_reporting ) {
error_reporting( $error_reporting );
}
return true;
}
sleep( 1 );
}
// If template_redirect has already happened, it's too late for gc_die()/dead_db().
// Let's just return and hope for the best.
if ( did_action( 'template_redirect' ) ) {
return false;
}
if ( ! $allow_bail ) {
return false;
}
gc_load_translations_early();
$message = '<h1>' . __( 'Error reconnecting to the database' ) . "</h1>n";
$message .= '<p>' . sprintf(
/* translators: %s: Database host. */
__( 'This means that we lost contact with the database server at %s. This could mean your host’s database server is down.' ),
'<code>' . htmlspecialchars( $this->dbhost, ENT_QUOTES ) . '</code>'
) . "</p>n";
$message .= "<ul>n";
$message .= '<li>' . __( 'Are you sure the database server is running?' ) . "</li>n";
$message .= '<li>' . __( 'Are you sure the database server is not under particularly heavy load?' ) . "</li>n";
$message .= "</ul>n";
$message .= '<p>' . sprintf(
/* translators: %s: Support forums URL. */
__( 'If you’re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href="https://docs.gechiui.com/classes/gcdb/check_connection/%s">GeChiUI Support Forums</a>.' ),
__( 'https://gechiui.org/support/forums/' )
) . "</p>n";
// We weren't able to reconnect, so we better bail.
$this->bail( $message, 'db_connect_fail' );
// Call dead_db() if bail didn't die, because this database is no more.
// It has ceased to be (at least temporarily).
dead_db();
}