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 !

7voto

alex Points 628

Parce que tester le numéro de port n'est pas une bonne pratique selon moi, ma solution est la suivante :

define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));

El HTTPS rendements constants TRUE si $_SERVER['HTTPS'] est défini et est égal à "1", "true", "on" ou "yes". Retourne FALSE dans le cas contraire.

7voto

Eugene Zakharenko Points 139

Pour tout système, à l'exception d'IIS, c'est suffisant pour définir l'URL du site :

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].'/';

ou

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/';

dépend de ce que vous voulez exactement : HTTP_HOST vs. SERVER_NAME

5voto

Harshit Points 474

En cas de procuration, le SERVER_PORT peut ne pas donner la valeur correcte, c'est donc ce qui a fonctionné pour moi -

$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) ? "https://" : "http://"

4voto

shashik493 Points 750

Utilisez cette variable de serveur pour obtenir les détails du protocole :

 $scheme = $_SERVER['REQUEST_SCHEME'] . '://';
 echo $scheme; //it gives http:// or https://

Notez que cette variable du serveur n'est pas fiable. Pour plus d'informations, consultez le site : Est-ce que $_SERVER['REQUEST_SCHEME'] est fiable ?

3voto

$protocal = 'http';
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') {$protocal = 'https';}

echo $protocal;

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