【问题标题】:Which $_SERVER variable should be used?应该使用哪个 $_SERVER 变量?
【发布时间】:2015-05-17 01:53:49
【问题描述】:

我正在尝试在 PHP 脚本中创建一个链接,该链接会将我带到地址的主要部分(粗体):http://localhost:8888/index.php

我可以将确切的链接放在自己身上,但我想如果我使用 $_SERVER 变量,那么如果我移动文件等,它将允许一定程度的灵活性。

我做了一个vardump($_SERVER),似乎$_SERVER['HTTP_ORIGIN'] 包含我需要的数据,但是这似乎也不是一个理想的使用变量: How secure is HTTP_ORIGIN?

这是创建动态链接的正确方法还是有替代方法?

【问题讨论】:

  • 如果我没记错的话,似乎How secure HTTP_ORIGIN is? 更多的是关于$_SERVER['HTTP_ORIGIN'] 对来自第三方网站的请求的安全性。如果您只想创建链接,您可能会很安全。但是,您应该使用SERVER_NAMESERVER_PORT 作为@ThiagoElias 的回答。
  • 为什么不能只使用相对 URI? /.

标签: php apache


【解决方案1】:

尝试使用

$address = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];

【讨论】:

    【解决方案2】:

    为了更加灵活,您可以检查是否使用了 https 或 http 以及是否使用了默认 80 或 443 (https) 以外的端口,这也意味着 URL 中是否未定义端口。

    function url(){
        $port = null;
        if( ($_SERVER['SERVER_PORT'] != '80') && ($_SERVER['SERVER_PORT'] != '443') ) {
            $port = ':' . $_SERVER['SERVER_PORT'];
        }
    
        $protocol = empty($_SERVER['HTTPS']) ? 'http://' : 'https://';
    
        return $protocol . $_SERVER['SERVER_NAME'] . $port;
    }
    

    【讨论】:

    • HTTPS 默认使用端口 443,而不是 80,因此如果用户使用 HTTPS 连接,即使原始端口中没有端口,您的函数也会在 URL 中添加端口。
    猜你喜欢
    • 2011-09-22
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多