Frage:
Ein Benutzer hat eine Funktion zum Einrichten der erstellt aktuelles Site-URL-Protokoll, bin mir aber nicht sicher, ob es unter HTTPS funktioniert, da sie kein SSL haben. Sie fragen, ob ihre Funktion korrekt ist:
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() );
Sie fragen sich auch, ob sie die Funktion wie folgt vereinfachen können:
function siteURL() { $protocol = 'http://'; $domainName = $_SERVER['HTTP_HOST'].'/' return $protocol.$domainName; } define( 'SITE_URL', siteURL() );
Antwort:
Die bereitgestellte Funktion ist korrekt und kann das Protokoll (http oder https) basierend auf den folgenden Bedingungen effektiv bestimmen:
Es gibt jedoch eine prägnantere Möglichkeit, das gleiche Ergebnis zu erzielen:
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://'; }
Dieser Codeausschnitt prüft sowohl das Vorhandensein von $_SERVER['HTTPS'] als auch, ob sein Wert „on“ oder 1 ist. Außerdem prüft er, ob $_SERVER['HTTP_X_FORWARDED_PROTO'] vorhanden ist und ob sein Wert „https“ ist '. Dieses Szenario tritt auf, wenn die Website HTTPS verwendet, das Protokoll jedoch nicht direkt über $_SERVER['HTTPS'] zugänglich ist.
Das obige ist der detaillierte Inhalt vonSo ermitteln Sie das aktuelle Site-URL-Protokoll in PHP: Ist diese Funktion korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!