• 23-01-2016, 13:02:08
    #1
    $_SERVER['REMOTE_ADDR'];
    ile kullanıcı ipsini alıyordum. sunucu değişikliğinden sonra kullanıcı ipsi yerine sunucunun ipsini gösteriyor. bunu nasıl düzeltebilirim?
  • 23-01-2016, 13:23:47
    #2
    if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
    }
  • 24-01-2016, 20:00:20
    #3
    VDS.TC adlı üyeden alıntı: mesajı görüntüle
    if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
    }
    Cevap için teşekkürler.
    Bunu denedim fakat 10 IP adresinden 5 tanesinde yine sunucu ipsi olarak gormekte. Php sürümü ile ilgili olabilirmi?
  • 25-01-2016, 02:48:58
    #4
    mhmtknbck adlı üyeden alıntı: mesajı görüntüle
    Cevap için teşekkürler.
    Bunu denedim fakat 10 IP adresinden 5 tanesinde yine sunucu ipsi olarak gormekte. Php sürümü ile ilgili olabilirmi?
    Evet olabilir tabiki bazı scriptlerde php sürümü kaynaklı uyum sorunları meydana geliyor ve manuel düzeltmek durumunda kalıyorsunuz. 5.4 stable sürümü kullanmanızı tavsiye ederim.
  • 25-01-2016, 09:39:27
    #5
    mhmtknbck adlı üyeden alıntı: mesajı görüntüle
    $_SERVER['REMOTE_ADDR'];
    ile kullanıcı ipsini alıyordum. sunucu değişikliğinden sonra kullanıcı ipsi yerine sunucunun ipsini gösteriyor. bunu nasıl düzeltebilirim?
    Sanırım Cpanel + Nginx server ile çalışıyorsunuz.

    function get_ip_address() {
        // check for shared internet/ISP IP
        if (!empty($_SERVER['HTTP_CLIENT_IP']) && validate_ip($_SERVER['HTTP_CLIENT_IP'])) {
            return $_SERVER['HTTP_CLIENT_IP'];
        }
    
        // check for IPs passing through proxies
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            // check if multiple ips exist in var
            if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false) {
                $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
                foreach ($iplist as $ip) {
                    if (validate_ip($ip))
                        return $ip;
                }
            } else {
                if (validate_ip($_SERVER['HTTP_X_FORWARDED_FOR']))
                    return $_SERVER['HTTP_X_FORWARDED_FOR'];
            }
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED']) && validate_ip($_SERVER['HTTP_X_FORWARDED']))
            return $_SERVER['HTTP_X_FORWARDED'];
        if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
            return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
        if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
            return $_SERVER['HTTP_FORWARDED_FOR'];
        if (!empty($_SERVER['HTTP_FORWARDED']) && validate_ip($_SERVER['HTTP_FORWARDED']))
            return $_SERVER['HTTP_FORWARDED'];
    
        // return unreliable ip since all else failed
        return $_SERVER['REMOTE_ADDR'];
    }
    
    /**
     * Ensures an ip address is both a valid IP and does not fall within
     * a private network range.
     */
    function validate_ip($ip) {
        if (strtolower($ip) === 'unknown')
            return false;
    
        // generate ipv4 network address
        $ip = ip2long($ip);
    
        // if the ip is set and not equivalent to 255.255.255.255
        if ($ip !== false && $ip !== -1) {
            // make sure to get unsigned long representation of ip
            // due to discrepancies between 32 and 64 bit OSes and
            // signed numbers (ints default to signed in PHP)
            $ip = sprintf('%u', $ip);
            // do private network range checking
            if ($ip >= 0 && $ip <= 50331647) return false;
            if ($ip >= 167772160 && $ip <= 184549375) return false;
            if ($ip >= 2130706432 && $ip <= 2147483647) return false;
            if ($ip >= 2851995648 && $ip <= 2852061183) return false;
            if ($ip >= 2886729728 && $ip <= 2887778303) return false;
            if ($ip >= 3221225984 && $ip <= 3221226239) return false;
            if ($ip >= 3232235520 && $ip <= 3232301055) return false;
            if ($ip >= 4294967040) return false;
        }
        return true;
    }

    Bu kod probleminizi çözecektir.
  • 25-01-2016, 12:26:46
    #6
    Evet, cPanel + Nginx. Sorun apache 2.4 ten 2.2 ye geçince düzeldi.
    Yardım ve cevaplarınız için teşekkür ederim.