• 14-12-2020, 19:34:06
    #1
    Merhabalar,

    PHP geliştiriciler kimi zaman bazı scriptlerde, projelerde kullanıcı verisi toplaması gerekiyor. Bazen müşteri talebiylede projeye bu özellikleri eklemek gerekebiliyor.

    KVKK, Çerez ve gizlilik politikası gibi detayları sitenize eklediğiniz sürece bu verileri toplamak hiç bir şekilde suç değildir.
    Google gibi firmalar kime platonik olduğunuzu bile tahmin edebilirken bu tarz basit verilerin hiç bir sorun oluşturmayacağını bilmeniz yeterli

    Bilmeyenler yada yeni başlayanlar için faydalı bir konu olacağını düşünüyorum.

    IP Adresi Öğrenme
    function getUserIP()
    {
        if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
                  $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
                  $_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
        }
        $client  = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote  = $_SERVER['REMOTE_ADDR'];
    
        if(filter_var($client, FILTER_VALIDATE_IP))
        {
            $ip = $client;
        }
        elseif(filter_var($forward, FILTER_VALIDATE_IP))
        {
            $ip = $forward;
        }
        else
        {
            $ip = $remote;
        }
    
        return $ip;
    }
    $ipadresi = getUserIP();
    Tarayıcı Bilgisi Çekme
    function getBrowser() {
    
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    $browser = "N/A";
    
    $browsers = array(
    '/msie/i' => 'Internet explorer',
    '/firefox/i' => 'Firefox',
    '/safari/i' => 'Safari',
    '/chrome/i' => 'Chrome',
    '/edge/i' => 'Edge',
    '/opera/i' => 'Opera',
    '/mobile/i' => 'Mobile browser'
    );
    
    foreach ($browsers as $regex => $value) {
    if (preg_match($regex, $user_agent)) { $browser = $value; }
    }
    
    return $browser;
    }
    $tarayici = getBrowser();
    Useragent Bilgisi Çekme
    $detayli_tarayici = $_SERVER['HTTP_USER_AGENT'];
    İşletim Sistemi Bilgisi Çekme
    function getOS() {
    
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
    
        $os_platform =   "Bilinmeyen İşletim Sistemi";
        $os_array =   array(
            '/windows nt 10/i'      =>  'Windows 10',
            '/windows nt 6.3/i'     =>  'Windows 8.1',
            '/windows nt 6.2/i'     =>  'Windows 8',
            '/windows nt 6.1/i'     =>  'Windows 7',
            '/windows nt 6.0/i'     =>  'Windows Vista',
            '/windows nt 5.2/i'     =>  'Windows Server 2003/XP x64',
            '/windows nt 5.1/i'     =>  'Windows XP',
            '/windows xp/i'         =>  'Windows XP',
            '/windows nt 5.0/i'     =>  'Windows 2000',
            '/windows me/i'         =>  'Windows ME',
            '/win98/i'              =>  'Windows 98',
            '/win95/i'              =>  'Windows 95',
            '/win16/i'              =>  'Windows 3.11',
            '/macintosh|mac os x/i' =>  'Mac OS X',
            '/mac_powerpc/i'        =>  'Mac OS 9',
            '/linux/i'              =>  'Linux',
            '/ubuntu/i'             =>  'Ubuntu',
            '/iphone/i'             =>  'iPhone',
            '/ipod/i'               =>  'iPod',
            '/ipad/i'               =>  'iPad',
            '/android/i'            =>  'Android',
            '/blackberry/i'         =>  'BlackBerry',
            '/webos/i'              =>  'Mobile'
        );
    
        foreach ( $os_array as $regex => $value ) {
            if ( preg_match($regex, $user_agent ) ) {
                $os_platform = $value;
            }
        }  
        return $os_platform;
    }
    $kullanici_os = getOS();
    ISS Çekme
    $kullanici_net = gethostbyaddr($_SERVER['REMOTE_ADDR']);
    IP ile ISS Çekme
    $kullanici_real_net = gethostbyaddr($ipadresi);
    API ile GEO2IP Bilgisi Çekme | Tam Konum Bilgisi (%90)
    $urlxx = "http://api.ipstack.com/";
    $ipxx = $ipadresi;
    $apikey = 'API_KEYINIZ';
    $parameter = "?access_key=$apikey&format=1";
    $sorguxx = "$urlxx$ipxx$parameter";
    $json = file_get_contents("$sorguxx");
    $obj = json_decode($json);
    $bolge = $obj->city;
    $lat = $obj->latitude;
    $longi = $obj->longitude;
    $ulke = $obj->country_name;
    
    //ulke değişkeni ülke bilgisini, longi longitude bilgisini, lat latitude bilgisini, bolge şehir bilgisini çekmektedir.
    //Bu api ile ülkeye göre bayrak svg dosyası, ilçe bilgisi, başkent bilgisi gibi diğer bilgileride alabilirisiniz.
    //API KEY İÇİN ipstack.com sitesinde ÜCRETSİZ üyelik alabilirsiniz.
    Forumda PHP'nin bu işlerin duayenleri var Bu bilgiler dışında başka hangi kullanıcı verileri PHP ile toplanabilir konu altında paylaşabilirsiniz. Herkese faydalı bir içerik oluşur. (bkz. r10 footer: “İnsanların en hayırlısı, insanlara faydalı olandır”. H.Ş. )
  • 14-12-2020, 19:39:37
    #2
    Eline sağlık kimse alınmasın ama son zamanların benim denk geldiğim en güzel bilgi paylaşımı
    Elinde bilgi olan gidip sitesine makale yazıyor
  • 14-12-2020, 19:39:42
    #3
    Ben bunu şu şekilde kullanmıştım;

    Her kullanıcıya bir guid tanımladım. tüm url tıklamalarında bu guid url'de oluyor.

    Analytics'de de bu guid'leri görebiliyorum. eğer kullanıcının kim olduğunu bilirsem onunla alakalı herşeey analytics'den erişim sağlayabilyioru. API ile hangi sayfada kaç sn kalmış gibi.

    Aynı zamanda yandex metrica ile de bağlarsak..

    Ayrıca bu guid'in her tıklamasını veritabanına kaydediyorum. Hangi forma tıklamış, formun hangi alanına ne yazmış, formu göndermişmi göndermemişmi. yarıda mı bırakmış vs vs...
  • 14-12-2020, 19:59:18
    #4
    "xxx.xxx.xx.xxx - - [14/Nov/2020:12:07:35 +0300] "GET /favicon.ico HTTP/1.1" 404 705 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36""

    Şuda access log çıktısı buda bir çözüm olabilir.
  • 14-12-2020, 23:02:32
    #5
    Kullanıcının cookielerinden tutun da kullandığı ekranın boyutuna kadar kullanıcıyı tanımaya yarayacak bir çok yöntem vardır. Ancak bunların detayına girmeyeceğim çünkü evet KVKK sözleşmesi ile hukuksal anlamda sorunsuz bir iş yapmış olabilirsiniz ancak etik açısından bu mahremiyeti zedeleyen bir girişim olacaktır. Dolayısıyla tavsiyem eğer amacınız istatistiksel veri toplamak ise bunu kişinin kimliğini tanımlayacak verilerle ilişkilendirmeden yapmanız. Elbette ki konu etik olduğundan bu tamamen size kalmış bir tercih. Eğer böyle bir ürüne ihtiyacınız varsa özgür ve ücretsiz bir yazılım olan https://matomo.org/ projesinin kodlarını github üzerinden bulup inceleyebilirsiniz.