Jump to content

lukftw

Members
  • Posts

    3
  • Joined

  • Last visited

About lukftw

  • Birthday 07/24/1992

Recent Profile Visitors

805 profile views

lukftw's Achievements

Newbie

Newbie (1/14)

12

Reputation

  1. Salut, acum 10 zile m-am gandit daca pot face un script care sa imi redirectioneze vizitatorii pe anumite linkuri in functie de tara de origine si daca este conectat de pe mobil sau desktop, am cautat putin pe internet si am ajuns la concluzia ca pot face asta destul de usor cu php si mysql, zis si facut : am facut cateva tutoriale de php si mysql(le-am prins repede, pentru ca am ceva experienta in programare din facultate), m-am apucat sa dezvolt scriptul cat mai repede pentru ca aveam nevoie de el si am ajuns la varianta intermediara, dar nu functioneaza foarte bine adica in jur de 30-40% din utilizatori se pierd pe drum. Acum sa explic putin functionalitatea gandita si implementata de mine, apoi voi posta codul si poate ma va ajuta cineva sa il fac sa mearga 100 % : 1. Se extrage ip-ul userului apoi se face un select query catre o baza de date interna formata din range-urile ip-urilor, baza de date este downloadata de aici : https://db-ip.com/db/#intro si se extrage codul tarii careia ii este asignat ip-ul, iar daca query-ul nu returneaza niciun rand se va returna 'NF' ca si country Code. 2. Se va verifica daca ip-ul este unic pe ziua respectiva si daca da se va scrie intr-un tabel(asta nu e este chiar relevant, este doar pentru a tine evidenta). 3. Se verifica daca userul este mobile sau desktop prin intermediul clasei oferita de google : http://mobiledetect.net/ 3. Cu codul tarii extras se va face o prioritizare in functie de tierul tarilor dupa cum urmeaza : United States, Marea Britanie, Australia, Canada, Noua Zeelanda si Africa de Sud sunt clasa ca Tier1, restul sunt clasate ca Tier2, iar daca codul este 'NF' se va clasa ca Lost pentru a tine evidenta daca va exista vreun query in baza de date a ip-urilor care nu va aduce rezultate. 4. Pentru statistici am implementat functia trackvisitors() care incrementeaza intr-un table de fiecare data cand un vizitator unic este pe site pe fiecare ora, dar si incrementeaza alte 3 valori pentru a vedea din ce tier face parte vizitatorul. 5. Si cea mai importanta functie : redirect(), care face un query in baza de date si extrage linkul pe care va fi redirectionat userul, in functie de Tierul din care face parte si browserul(mobile sau desktop), iar baza de date arata cam asa : http://prntscr.com/ee4kv2 , ce este scris la offerlink este irelevant, redirectul se face doar pe afflink. La indemnul cuiva am pus "die;" dupa header();, dar nu a avut nicio schimbare, in continuare pierd undeva in jur de 30-40% de utilizatori, pentru ca daca fac redirect domeniului din cpanel spre un singur link care este contorizat de aceeasi firma care contorizeaza si restul linkurilor, numarul este normal, dar cand rulez scriptul acesta scade dramatic, chiar acum 2 zile am instalat LAMP stack pe un vps pentru a hosta scriptul acolo, dar rezultatul este acelasi, am urmarit si fisierul de apache2 errors, dar nu a a inregistrat mai nimic, mai exact asa : tail -f /var/log/apache2/error.log, ba chiar am stat si cu top deschis vreo 10 minute pentru a monitoriza load averageul iar acesta sta in 0.01 - 0.02 constant. Codul sursa: <?php include ("Mobile_Detect.php"); ob_start(); $ip=$_SERVER['REMOTE_ADDR']; date_default_timezone_set("America/New_York"); $date = date("Y-m-d"); $hour = date("G"); $servername = "127.0.0.1"; $username = "root"; $password = "******"; $dbname = "trackingscript"; $detect = new Mobile_Detect(); if ($detect->isMobile()) $browser = "Mobile"; else $browser = "Desktop"; $mysqli = new mysqli($servername, $username, $password, $dbname); $countryCode = getCountry(); $unique = checkuniqueip($ip); $getTier = getCountryTier(); $CountryTier = $getTier['countryTier']; trackvisitors(); redirect(); function shorturl($lurl){ $curl = curl_init(); $post_data = array('format' => 'json', 'apikey' => '3B77EIBEGAD90FB7A806', 'provider' => 'bit_ly', 'url' => $lurl ); $api_url = 'http://tiny-url.info/api/v1/create'; curl_setopt($curl, CURLOPT_URL, $api_url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $url = curl_exec($curl); curl_close($curl); $url1 = json_decode($url); return $url1->shorturl; } function getCountry(){ global $mysqli; global $ip; $connect = $mysqli->query("SELECT Country FROM iptables WHERE INET_ATON('$ip') >= INET_ATON(MinRange) AND INET_ATON('$ip') <= INET_ATON(MaxRange)"); if($connect->num_rows == 0){ $countryCode = 'NF'; }else{ while($row = $connect->fetch_assoc()){ $countryCode = $row['Country']; } } return $countryCode; } function checkuniqueip($ip){ global $countryCode; global $browser; global $date; global $hour; global $mysqli; $checkip = $mysqli->query("SELECT IP FROM UniqueIp WHERE IP = '$ip' AND DATE = '$date' AND BROWSER = '$browser'"); if($checkip->num_rows == 0){ $sql = $mysqli->query("INSERT INTO UniqueIp(DATE, HOUR, IP, COUNTRY, BROWSER) VALUES('$date','$hour','$ip','$countryCode','$browser')"); #echo $mysqli->error; return 1; }else{ return 0; } } function getCountryTier(){ global $date; global $hour; $country = getCountry(); if ($country == 'US' || $country == 'GB' || $country == 'AU' || $country == 'CA' || $country == 'ZA' || $country == 'NZ'){ $countryTier = 'Tier1'; $sqlstatementinsert = "INSERT INTO trackingTable(DATE,HOUR, TotalVisitors, Tier1, Tier2, Lost) VALUES ('$date','$hour',1,1,0,0)"; $sqlstatementupdate = "UPDATE trackingTable SET TotalVisitors = TotalVisitors + 1, Tier1 = Tier1 + 1 WHERE DATE = '$date' AND HOUR ='$hour'"; }else if($country == 'NF'){ $countryTier = 'Lost'; $sqlstatementinsert = "INSERT INTO trackingTable(DATE,HOUR, TotalVisitors, Tier1, Tier2, Lost) VALUES ('$date','$hour',1,0,0,1)"; $sqlstatementupdate = "UPDATE trackingTable SET TotalVisitors = TotalVisitors + 1, Lost = Lost + 1 WHERE DATE = '$date' AND HOUR ='$hour'"; }else{ $countryTier = 'Tier2'; $sqlstatementinsert = "INSERT INTO trackingTable(DATE,HOUR, TotalVisitors, Tier1, Tier2, Lost) VALUES ('$date','$hour',1,0,1,0)"; $sqlstatementupdate = "UPDATE trackingTable SET TotalVisitors = TotalVisitors + 1, Tier2 = Tier2 + 1 WHERE DATE = '$date' AND HOUR ='$hour'"; } return array('countryTier' => $countryTier, 'sqlInsert' => $sqlstatementinsert, 'sqlUpdate' => $sqlstatementupdate); } function trackvisitors(){ global $date; global $hour; global $mysqli; global $ip; $countryTier = getCountryTier(); $checkdate = $mysqli->query("SELECT TotalVisitors FROM trackingTable WHERE DATE = '$date' AND HOUR = '$hour'"); if($checkdate->num_rows == 0){ $sql = $mysqli->query($countryTier['sqlInsert']); }else{ global $unique; if($unique == 1){ $sql = $mysqli->query($countryTier['sqlUpdate']); } } } function redirect(){ global $browser; global $hour; global $ip; global $date; global $mysqli; global $CountryTier; $redirectTo = $mysqli->query("SELECT OFFERLINK, AFFLINK FROM Links1 WHERE Tier = '$CountryTier' AND BROWSER = '$browser'"); while($row = $redirectTo->fetch_assoc()){ $result = $row['AFFLINK']; $result1 = $row['OFFERLINK']; } $sql = $mysqli->query("UPDATE UniqueIp SET LINKREDIRECTED = '$result1' WHERE IP = '$ip' AND DATE = '$date' AND HOUR = '$hour' AND BROWSER = '$browser'"); $mysqli->close(); #$result1 = shorturl($result); header("Location: ".$result); die; } ?>
×
×
  • Create New...