问题:
用户创建了一个函数来建立当前站点 URL 协议,但不确定它是否在 HTTPS 下工作,因为它们没有 SSL。他们询问他们的函数是否正确:
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() );
他们还想知道是否可以将函数简化如下:
function siteURL() { $protocol = 'http://'; $domainName = $_SERVER['HTTP_HOST'].'/' return $protocol.$domainName; } define( 'SITE_URL', siteURL() );
答案:
提供的函数是正确的,可以根据以下条件有效判断协议(http或https):
但是,有一种更简洁的方法可以达到相同的结果:
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://'; }
此代码片段检查 $_SERVER['HTTPS'] 是否存在以及其值是否为“on”或 1。 它还检查 $_SERVER['HTTP_X_FORWARDED_PROTO'] 是否存在及其值是否为“https” '。当网站使用 HTTPS,但无法通过 $_SERVER['HTTPS'] 直接访问该协议时,就会出现这种情况。
以上是如何在 PHP 中确定当前站点 URL 协议:此函数正确吗?的详细内容。更多信息请关注PHP中文网其他相关文章!