• 周六. 7 月 13th, 2024

    PHP获取服务端IP地址

    root

    8 月 31, 2020 #getIp, #php

    为什么要获取服务端的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修改一下命令即可,原理一样。

    root

    发表回复