我的网站严重依赖$_SERVER['SERVER_ADDR']
。我可以信任检索到的数据吗?有可能找到一个空字符串吗?
答案 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];
}
}
}