获取服务器公网IP是我们在编程时经常会用到的功能,所以我把从不同来源获取公网IP的各种方法整理成了一个示例程序,方便大家使用。
这个程序一共演示了6种获取公网IP的方式:
- 使用PHP内置变量$_SERVER[‘SERVER_ADDR’]
- 通过函数gethostbyname()
- 使用curl请求外部服务
- 使用file_get_contents请求外部服务
- 解析标准输出流
- 过滤本地IP,返回公网IP
第6种方法通过过滤掉本地回环地址,再返回第一个公网IP,可以尽量确保获取到的是服务器的公网IP,而不是本地IP,所以结果会更准确。
完整的源码如下:
<?php
echo '<style>body{font-family:Arial;color:#333;font-size:16px;}</style>';
echo '<h1>获取服务端公网IP示例</h1>';
//方法1:使用$_SERVER变量
echo '<b>方法1:</b> ' . $_SERVER['SERVER_ADDR'] . '<br>';
//方法2:使用gethostbyname()函数
echo '<b>方法2:</b> ' . gethostbyname(gethostname()) . '<br>';
//方法3:使用curl请求外部服务
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ip = curl_exec($curl);
curl_close($curl);
echo '<b>方法3:</b> ' . $ip . '<br>';
//方法4:使用file_get_contents请求外部服务
$ip = file_get_contents('http://ipecho.net/plain');
echo '<b>方法4:</b> ' . $ip . '<br>';
//方法5:解析标准输出流
ob_start();
system('curl ipecho.net/plain');
$ip = ob_get_contents();
ob_end_clean();
echo '<b>方法5:</b> ' . $ip . '<br>';
//方法6:过滤本地IP,返回第一个公网IP
function get_local_ip(){
$ipList = gethostbynamel(gethostname());
$ipList = array_filter($ipList, function($ip){
return $ip != '127.0.0.1';
});
$ip = reset($ipList);
return $ip;
}
echo '<b>方法6:</b> ' . get_local_ip() . '<br>';
?>
使用方法很简单,只需要将代码保存为php文件,并访问这个页面,就可以看到从不同途径获取的服务器公网IP了。
这个代码可以帮助大家快速获取服务器公网IP,可用于输出IP地址、获取用户信息、ANALYSIS等功能。同时也展示了PHP的一些语法知识,如数组处理、过滤、输出获取等,可以作为代码示例来参考。
如果大家在使用中遇到什么问题,欢迎交流讨论!感谢关注和支持!