如何在 PHP 中确定当前站点 URL 协议:此函数正确吗?

Mary-Kate Olsen
发布: 2024-10-27 16:58:02
原创
775 人浏览过

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

PHP 获取站点 URL 协议 - http 与 https

问题:

用户创建了一个函数来建立当前站点 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):

  • 如果$_SERVER['HTTPS']不为空且不等于'off '
  • 如果 $_SERVER['SERVER_PORT'] 等于 443

但是,有一种更简洁的方法可以达到相同的结果:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!