应该使用哪个 $_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_NAME
和SERVER_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 变量?的主要内容,如果未能解决你的问题,请参考以下文章