VaultPress::validate_ip_address PHP Метод

validate_ip_address() публичный Метод

public validate_ip_address ( $rxs )
    function validate_ip_address($rxs)
    {
        global $__vp_validate_error;
        if (empty($rxs)) {
            $__vp_validate_error = array('error' => 'empty_vp_ip_range');
            return false;
        }
        $remote_ips = array();
        if ($this->get_option('allow_forwarded_for') && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $remote_ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        }
        if (!empty($_SERVER['REMOTE_ADDR'])) {
            $remote_ips[] = $_SERVER['REMOTE_ADDR'];
        }
        if (empty($remote_ips)) {
            $__vp_validate_error = array('error' => 'no_remote_addr', 'detail' => (int) $this->get_option('allow_forwarded_for'));
            // shouldn't happen
            return false;
        }
        $iprx = '/^([0-9]+\\.[0-9]+\\.[0-9]+\\.)([0-9]+)$/';
        foreach ($remote_ips as $_remote_ip) {
            $remote_ip = preg_replace('#^::(ffff:)?#', '', $_remote_ip);
            if (!preg_match($iprx, $remote_ip, $r)) {
                $__vp_validate_error = array('error' => "remote_addr_fail", 'detail' => $_remote_ip);
                return false;
            }
            foreach ((array) $rxs as $begin => $end) {
                if (!preg_match($iprx, $begin, $b)) {
                    continue;
                }
                if (!preg_match($iprx, $end, $e)) {
                    continue;
                }
                if ($r[1] != $b[1] || $r[1] != $e[1]) {
                    continue;
                }
                $me = $r[2];
                $b = min((int) $b[2], (int) $e[2]);
                $e = max((int) $b[2], (int) $e[2]);
                if ($me >= $b && $me <= $e) {
                    return true;
                }
            }
        }
        $__vp_validate_error = array('error' => 'remote_addr_fail', 'detail' => $remote_ips);
        return false;
    }
VaultPress