在家里做个小数据中心,在一些自动脚本里需要查询自己的公网IP。网上这类站点很多,但是大站都不是纯净的IP字段,小站担心服务长期稳定提供的问题,自己做一个更靠谱。

函数摘自: https://www.cnblogs.com/sgm4231/p/10043827.html

一、创建站点

我用的宝塔面板,创建站点很简单。
创建完站点,在网站主目录自己创建个index.php替换原有index.html

二、写页面

<?php
function getip(){
    $ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
        foreach ($matches[0] AS $xip) {
            if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
                $ip = $xip;
                break;
            }
        }
    } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CF_CONNECTING_IP'])) {
        $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
    } elseif (isset($_SERVER['HTTP_X_REAL_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) {
        $ip = $_SERVER['HTTP_X_REAL_IP'];
    }

    return $ip;
}
?>

<html>
	<head>
		<title>Get IP -- iDeer Web Tools</title>
	</head>
	<body>
		<?php echo getip(); ?>
	</body>
</html>

完成