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 :
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!