应该使用哪个 $_SERVER 变量?

Posted

技术标签:

【中文标题】应该使用哪个 $_SERVER 变量?【英文标题】:Which $_SERVER variable should be used? 【发布时间】: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? /. 【参考方案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 中添加端口。

以上是关于应该使用哪个 $_SERVER 变量?的主要内容,如果未能解决你的问题,请参考以下文章

[单选题]哪个变量是PHP自动提供的?

PHP获取客户端和服务器端IP

PHP获取客户端和服务器端IP(转)

在本地使用数据库时应该首选哪个数据库 - Access DB 或 Sql Server DB? [关闭]

php:获取IP地址

获取服务器IP,客户端IP