【发布时间】:2011-01-09 08:44:29
【问题描述】:
如何在 PHP 中不使用 $_SERVER['SERVER_NAME'] 来获取真实主机名?还有其他更可靠的方法吗?
我创建了一个从域路径获取主机名的函数。
我想避免使用 $_SERVER['SERVER_NAME'] 变量,因为它可以通过在 HTTP 请求中发送修改后的标头来伪造。
这是我当前的实现(如果路径中包含实际域名,则此方法有效。例如:/vhosts/website.com/public_html):
function getServerName() {
$path = realpath(__FILE__);
$url = array();
preg_match_all("/\/[a-z0-9-]+(\.[a-z0-9-]+)+/i", $path, $url);
// 4 is minimum requirement for the address (e.g: http://www.in.tv)
if (strlen($url[0][0]) > 4) {
$result = str_replace("/", "", $url[0][0]);
return $result;
}
else
return false;
}
谢谢!
【问题讨论】:
-
更可能他不知道如何正确表达他的问题。帮助新手并解释他在提供的环境和 HTTP 协议中误解了什么而不是投票否决他的问题会很好。
-
你知道的,很好。我会解决这个问题。问题是他说的一半我听不懂,只能推断他在说什么。我只能假设'PATH' 的意思是'SCRIPT_PATH',我不知道他是在谈论'HTTP_HOST' 还是'SERVER_NAME'。似乎很难相信他可以写一个脚本,却不知道他使用了哪些变量。
-
@Chacha102 是的,我知道,我一遍又一遍地从我的同事那里听到同样的问题...... ;-) 我刚刚发布了一个更长的答案,希望下一个“信息寻求者”可以更多很容易找到它。永不放弃? ;-)
-
嗯,nvm。我不会主要编辑它,因为他不知道他在说什么变量,因此我无法可靠地解决这个问题。
-
@minnur 请修正您原来的问题...($_SERVER 的哈希索引似乎不正确)
标签: php