2017-02-24 5 views
-2

Ich habe ein PHP-Skript, das einen Benutzer nach seinem geographischen Bereich umleitet, etwas wie: wenn der Benutzer aus USA, UK, CA (als Tier1) und von Mobile oder Desktop verbunden ist, wird es zu einem bestimmten umleiten Seite, sonst wird auf eine andere Seite umgeleitet. Ich mache die Geoverifizierung mit einer internen IP-Datenbank von einer der ip2geo-Sites heruntergeladen, die Datenbank funktioniert gut .. Ausführen einer Abfrage für 365k Zeilen in maximal 0,2 s, die mobile Erkennung erfolgt mit dieser Klasse: http://mobiledetect.net/ und die Das Hauptproblem ist, dass die Benutzer beim Ausführen des Skripts irgendwie verloren gehen, etwa 40% der Klicks gelangen irgendwie nicht zur Quelle. Wenn ich die Weiterleitung normal (alle Benutzer auf die gleiche Seite umgeleitet) aus cpanel macht es funktioniert gut, aber mit Header ("Location:") Nein, ich habe keine Echos im Code.PHP-Header ("Ort:"); funktioniert nicht gut

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"); 

$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(); 

und hier ist die Umleitungsfunktion:

<?php 
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(); 
    header("Location: ".$result); 
} 
?> 
+1

für Sie arbeiten Was ist der Fehler? –

+1

Ihr 'redirect()' scheint davon abhängig zu sein, ob es in Ihrer '$ redirectTo/Links1'-Abfrage eine übereinstimmende Zeile gibt. Sind Sie sicher, dass alle 'redirect()' Aufrufe zu einem '$ row ['AFFFLINK'];' value? Es kann eine gute Idee sein, einen Standard-Wert "$ result" einzugeben, für den Fall, dass keine übereinstimmenden Zeilen vorhanden sind. – JustBaron

+0

@AlexLucaci Es ist eine gute Form, auf Kommentare zu antworten und Antworten zu akzeptieren/up-Stimmen, wenn Sie eine Frage stellen;) – JustBaron

Antwort

1

Diese

header("Location: ".$result); 
die; 
+0

Die beste Lösung bisher, aber ich glaube nicht, dass es voll funktioniert, ich verliere jetzt nur 10-15% der Besucher. –