218 votes

Protocole PHP Get Site URL - http vs https

J'ai écrit une petite fonction pour établir le protocole de l'url du site actuel mais je n'ai pas de SSL et je ne sais pas comment tester si cela fonctionne sous https. Pouvez-vous me dire si c'est correct ?

function siteURL()
{
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $domainName = $_SERVER['HTTP_HOST'].'/';
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );

Est-il nécessaire de le faire comme ci-dessus ou puis-je simplement le faire comme ?

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );

Sous SSL, le serveur ne convertit-il pas automatiquement l'URL en https même si l'URL de la balise d'ancrage utilise http ? Est-il nécessaire de vérifier le protocole ?

Merci !

3voto

ereginator Points 54

Je sais qu'il s'agit d'une vieille question, mais je suis tombé dessus aujourd'hui, car j'avais besoin d'effectuer un test pour mon site. Il semble que les réponses ci-dessus soient inutilement compliquées. Pour établir le protocole du site, il suffit de tester $_SERVER['HTTPS']

Si le protocole utilise HTTPS, alors $_SERVER['HTTPS'] retournera "on". Dans le cas contraire, la variable restera vide. Par exemple : // test if HTTPS is being used. If it is, the echo will return '$SSL_test: on'. If not HTTPS, '$SSL_test' will remain empty.

`$SSL_test = $_SERVER['HTTPS'];

echo '<p>$SSL_test: '.$SSL_test.'</p>';

if($SSL_test == true) {
    echo 'You\'re using SSL';
} else {
    echo 'You\'re not using SSL';
}` 

Vous pouvez utiliser ce qui précède pour tester facilement et proprement le HTTPS et le mettre en œuvre en conséquence. :)

2voto

miyuru Points 360

A créé une fonction utilisant le Rid Iculous La réponse de l'auteur a fonctionné sur mon système.

function site_protocol() {
    if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&  $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')  return $protocol = 'https://'; else return $protocol = 'http://';
}

J'espère que cela vous aidera

2voto

Pedro Lobito Points 6794

J'ai testé le réponse la plus votée r et il n'a pas fonctionné pour moi que j'ai fini par utiliser :

$protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';

2voto

Scotty G Points 348

Voici comment je fais... c'est une... sténographie if else version de Rid Iculous's répondre ...

$protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http';

2voto

Guillaume Points 149

Extrait de CodeIgniter :

if ( ! function_exists('is_https'))
{
    /**
     * Is HTTPS?
     *
     * Determines if the application is accessed via an encrypted
     * (HTTPS) connection.
     *
     * @return  bool
     */
    function is_https()
    {
        if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off')
        {
            return TRUE;
        }
        elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https')
        {
            return TRUE;
        }
        elseif ( ! empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off')
        {
            return TRUE;
        }

        return FALSE;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X