为什么要获取服务端的IP地址呢? 目的是什么?
在多环境的开发中,我们在公司经常会有开发环境,测试环境,防真沙箱环境,正式环境, 对应的各种环境就有不同的域名。
这个时候,当我们使用当下的Rpc服务时,就需要调用特定的环境域名,这时如果我们可以判断当前的环境,就可以自动的实现调用对应环境的Rpc服务代码。
好处是不用代码每发布到一个环境就需要修改域名,实再自动切换
以下是底层获取ip的代码, 如有问题请大家指正
public function get_server_ip() {
if (PHP_SAPI === 'cli'){
$buffer = "";
$handle = popen("ifconfig eth0|grep 'inet addr'|awk -F'[ :]' '{print $13}'", 'r');
while(!feof($handle)) {
$buffer.=fgets($handle);
}
pclose($handle);
$server_ip = rtrim($buffer);
}else{
if (isset($_SERVER)) {
if($_SERVER['SERVER_ADDR']) {
$server_ip = $_SERVER['SERVER_ADDR'];
} else {
$server_ip = $_SERVER['LOCAL_ADDR'];
}
} else {
$server_ip = getenv('SERVER_ADDR');
}
}
return $server_ip;
}
缺点: 当你是在命令行执行该程序,就需要有一个用户登录的状态,不然代码中的ifconfig无法执行,拿到的ip也是错误的
第二点注意,代码中的ifconfig是centos6中使用的, 如果大家用的centos7修改一下命令即可,原理一样。