🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 判断是否为合法的ip地址(is_ip_address) ~~~ /** * 判断是否为合法的ip地址 * @param string $ip ip地址 * @return bool|int 不合法则返回false,合法则返回4(IPV4)或6(IPV6) */ function is_ip_address($ip) { $ipv4Regex = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/'; $ipv6Regex = '/^(((?=.*(::))(?!.*\3.+\3))\3?|([\dA-F]{1,4}(\3|:\b|$)|\2))(?4){5}((?4){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i'; if (preg_match($ipv4Regex, $ip)) return 4; if (false !== strpos($ip, ':') && preg_match($ipv6Regex, trim($ip, ' []'))) return 6; return false; } ~~~ ## 获取客户端IP地址(get_ip_address) ~~~ /** * 获取客户端访问ip地址 * @return string ip地址 * 说明: * $_SERVER超级全局变量中的 HTTP_X_FORWARDED_FOR可以通过curl或fsockopen等的函数进行构(伪)造头信息,如果在一些需要验证ip地址的场景(比如判断ip登录地址,通过ip统计抽奖次数等),会有被欺骗的风险。 * 其实$_SERVER超级全局变量中以 HTTP_开头的元素,都可以被构(伪)造,业务中以此进行验证或判断的逻辑,都需要谨慎。 * */ function get_ip($default=''){ return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : $default; } ~~~