Maison  >  Article  >  développement back-end  >  Comment déterminer le protocole URL actuel du site en PHP : cette fonction est-elle correcte ?

Comment déterminer le protocole URL actuel du site en PHP : cette fonction est-elle correcte ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 16:58:02867parcourir

 How to Determine the Current Site URL Protocol in PHP: Is this Function Correct?

PHP Get Site URL Protocol - http vs https

Question :

Un utilisateur a créé une fonction pour établir le protocole URL actuel du site, mais il ne sait pas s'il fonctionne sous HTTPS car ils n'ont pas SSL. Ils demandent si leur fonction est correcte :

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() );

Ils se demandent également s'ils peuvent simplifier la fonction comme suit :

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

Réponse :

La fonction fournie est correcte et peut déterminer efficacement le protocole (http ou https) en fonction des conditions suivantes :

  • Si $_SERVER['HTTPS'] n'est pas vide et n'est pas égal à 'off '
  • Si $_SERVER['SERVER_PORT'] est égal à 443

Cependant, il existe une manière plus concise d'obtenir le même résultat :

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://';
}

Cet extrait de code vérifie à la fois la présence de $_SERVER['HTTPS'] et si sa valeur est 'on' ou 1. Il vérifie également la présence de $_SERVER['HTTP_X_FORWARDED_PROTO'] et si sa valeur est 'https '. Ce scénario se produit lorsque le site Web utilise HTTPS, mais que le protocole n'est pas directement accessible via $_SERVER['HTTPS'].

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn