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 !

87voto

Ivo Points 1253

Je sais qu'il est tard, mais il existe un moyen beaucoup plus pratique de résoudre ce genre de problème ! Les autres solutions sont assez désordonnées ; voici comment je m'y prendrais :

$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';

...ou même sans condition si vous préférez :

$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';

Jetez un coup d'œil à $_SERVER["SERVER_PROTOCOL"]

86voto

Rid Iculous Points 692

Cela fonctionne pour moi

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

76voto

profitphp Points 4883

Ce n'est pas automatique. Votre fonction supérieure semble correcte.

28voto

Anoop K Points 151

Quelques changements :

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

22voto

softcod.com Points 418

Chemin court

$scheme = $_SERVER['REQUEST_SCHEME'] . '://';

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