web-dev-qa-db-fra.com

Comment obtenir l'URL du site si la base de données est déconnectée?

Récemment, j'ai compris que vous pouviez inclure un fichier db-error.php dans votre répertoire wp-content à partir de " Comment contrôler le serveur afin de détecter les erreurs lors de l'établissement d'une connexion à une base de données " qui remplacerait le message d'erreur de la base de données WordPress par quelque chose de personnalisé. J'ai pensé faire une redirection dans db-error.php comme ceci:

header("Location: http://vader.com/saber.html");
exit();

mais je voulais remplacer http://vader.com par l'URL du site afin qu'il puisse être portable, mais après des recherches, je n'ai pas trouvé de moyen d'obtenir l'URL du site sans la connexion et des discussions m'ont indiqué que vous souhaitiez apporter des modifications minimales au wp. fichier de configuration. Existe-t-il un moyen d’obtenir l’URL du site sans connexion à la base de données qui pourrait être utilisée dans la redirection d’en-tête?

3

Une option consiste à définir l'URL du site dans le fichier wp-config.php lui-même. Cela remplace l'option siteurl qui est par ailleurs stockée dans la base de données, mais cela signifie également que vous pouvez référencer l'URL sans effectuer de requête.

De le Codex :

Il est possible de définir l'URL du site manuellement dans le fichier wp-config.php.

Ajoutez ces deux lignes à votre fichier wp-config.php, où "example.com" est l'emplacement correct de votre site.

define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');

Après cela, utiliser du code dans un thème régulier vérifiant l'option siteurl ou home extraira de la constante plutôt que de la base de données (d'où ma note sur la substitution ci-dessus). Mais dans votre script d'erreur par défaut, vous pouvez référencer WP_SITEURL directement pour créer une URL de redirection.

2
EAMann

L’erreur de base de données doit provenir du site demandé. Alors pourquoi ne pas simplement utiliser le Superglobal $ _SERVER et obtenir l’hôte HTTP.

header("Location: https://" . $_SERVER['HTTP_Host'] ); //Redirect to root

exit(); //Exit 
1
Dhul Wells

WordPress s'appuie sur la configuration pour "indiquer" quelle est l'URL correcte. Cela peut être une option de base de données ou une constante WP_HOME qui la remplace. Pour un site personnalisé, il est courant de définir constant dans wp-config.php et de ne pas déranger complètement avec l'option de base de données.

Le cas général est plus compliqué puisqu'il n'y a pas de fonction API dédiée WP (ce dont je me souviens bien) qui la rend détermine cette information sans configuration.

La routine la plus proche à laquelle je peux penser dans source est lorsque le mode RELOCATE est défini, ce qui indique explicitement à WP que la configuration de l'URL n'est pas fiable et qu'elle devrait être mise à jour à partir de l'état actuel.

Le code correspondant dans wp-login.php fait ce qui suit:

if ( defined( 'RELOCATE' ) && RELOCATE ) { // Move flag is set
    if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
        $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );

    $url = dirname( set_url_scheme( 'http://' .  $_SERVER['HTTP_Host'] . $_SERVER['PHP_SELF'] ) );
    if ( $url != get_option( 'siteurl' ) )
        update_option( 'siteurl', $url );
}

Donc dans l’ensemble, sans accès à la configuration, votre option restante passe dans le contexte $_SERVER, qui n’est pas trop fiable.

0
Rarst