如何在ZF 1.12中获取http主机

时间:2013-07-04 11:08:31

标签: php zend-framework http-host

如何获取主机地址? 例如,我的网站位于此处: http://example.org/index/news/ 我只想提取 http://example.org/

我问起ZF功能。我知道$ _SERVER ['HTTP_HOST'],但我正在寻找原生的东西。

2 个答案:

答案 0 :(得分:3)

来自控制器:

$this->getRequest()->getServer('HTTP_HOST')

这将给你example.org,其余的你必须添加它。

答案 1 :(得分:2)

接受的答案非常好,但您可能需要记住一些事情。

$this->getRequest();

是一个函数/方法调用,这意味着开销不是必需的,因为控制器具有受保护的$_request属性,所以

$this->_request

getRequest方法只是暴露$_request属性(它是一个公共方法):

public function getRequest()
{
    return $this->_request;
}

应该稍微高效一点。此外,如果您查看getServer方法的来源:

public function getServer($key = null, $default = null)
{
    if (null === $key) {
        return $_SERVER;
    }

    return (isset($_SERVER[$key])) ? $_SERVER[$key] : $default;
}

除了语法糖之外,在没有提供默认值的情况下使用该方法毫无意义。
最快的方式永远是

$_SERVER['HTTP_HOST'];

然而,结合两者的优点,最安全(和最类似ZF的方式)将是:

$this->_request->getServer('HTTP_HOST', 'localhost');//default to localhost, or whatever you prefer.

您正在寻找的完整代码可能是:

$base = 'http';
if ($this->_request->getServer('HTTPS', 'off') !== 'off')
{
    $base .= 's';
}
$base .= '://'.$this->_request->getServer('SERVER_NAME', 'localhost').'/';

在您的情况下,应该导致http://expample.org/ see here获取您可以获得的SERVER参数的完整列表,它们的含义以及值可能是什么......