$ _SERVER ['SERVER_ADDR']可以安全依赖吗?

时间:2011-04-18 15:18:15

标签: php

我的网站严重依赖$_SERVER['SERVER_ADDR']。我可以信任检索到的数据吗?有可能找到一个空字符串吗?

3 个答案:

答案 0 :(得分:8)

从php引用我引用了一些

这似乎取决于托管PHP的服务器(尤其是apache,IIS ...)

http://php.net/manual/en/reserved.variables.server.php

  

在Windows IIS 7上,您必须使用   $ _SERVER ['LOCAL_ADDR']而不是   获得$ _SERVER ['SERVER_ADDR']   服务器的IP地址。

另一个。

  

运行IIS v6的Windows没有   包括$ _SERVER ['SERVER_ADDR']

     

如果您需要获取IP地址,   请改用:

<?php $ipAddress =
 gethostbyname($_SERVER['SERVER_NAME']);
?>

答案 1 :(得分:4)

Marc开始,这可能适用于跨平台的情况:

array_key_exists('SERVER_ADDR',$_SERVER) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR'];

答案 2 :(得分:2)

我在不同的服务器环境(Windows和Linux)中使用以下功能:

function getServerAddress() {
if(array_key_exists('SERVER_ADDR', $_SERVER))
    return $_SERVER['SERVER_ADDR'];
elseif(array_key_exists('LOCAL_ADDR', $_SERVER))
    return $_SERVER['LOCAL_ADDR'];
elseif(array_key_exists('SERVER_NAME', $_SERVER))
    return gethostbyname($_SERVER['SERVER_NAME']);
else {
    // Running CLI
    if(stristr(PHP_OS, 'WIN')) {
        return gethostbyname(php_uname("n"));
    } else {
        $ifconfig = shell_exec('/sbin/ifconfig eth0');
        preg_match('/addr:([\d\.]+)/', $ifconfig, $match);
        return $match[1];
    }
  }
}