2012-10-26 12 views
29

Ich versuche, ein Pixel zu erstellen, das die aktuelle URL, auf der sich der Benutzer befindet, nachverfolgen kann. Ich kann entweder JS (bevorzugt) oder ein 1x1 Bildpixel verwenden. Mit JS gehe ich davon aus, dass ich eine AJAX-Anfrage an ein PHP-Skript ausführen muss, um die benötigten Informationen zu erfassen und mit einem Bildpixel, das Probleme mit der aktuellen URL hat.Entwickeln eines Tracking-Pixels

Ich dachte auch über URL-Codierung der aktuellen URL mit JS und dynamisch das Bild Pixel mit der codierten aktuellen URL als Abfrage-String zu einem PHP-Skript, aber das kann ich sehr lange werden.

Wenn ich auf die AJAX-Route gehe, welche AJAX-Bibliothek kann ich verwenden? JQuery ist für diesen Zweck zu aufgebläht.

Irgendwelche anderen Ideen?

+2

Sie brauchen überhaupt kein Ajax, da ein Pixel-Bild, das in PHP generiert wurde, einfach als Bild in Ihrem HTML-Code enthalten wäre. – nickhar

+2

Verwenden Sie einfach das Serverprotokoll oder Google Analytics. –

+0

@Dagon Dies ist für eine speziell angefertigte App, für die ich mehrere Informationen sammeln muss. –

Antwort

47

Sie können ein Skript schreiben, das erstellt und gibt ein .gif, .jpeg oder .png Bild zu Tracking-Zwecken mit PHP mit dem GD library (die oft mit PHP in modernen Versionen verteilt wird). Wenn Sie keinen Zugriff auf GD haben, können Sie PHP immer mit GD-fähigen Komponenten neu kompilieren.

Beispiel:

pixel.php (für die Zwecke der Erklärung kommentiert):

<?php 

    // Create an image, 1x1 pixel in size 
    $im=imagecreate(1,1); 

    // Set the background colour 
    $white=imagecolorallocate($im,255,255,255); 

    // Allocate the background colour 
    imagesetpixel($im,1,1,$white); 

    // Set the image type 
    header("content-type:image/jpg"); 

    // Create a JPEG file from the image 
    imagejpeg($im); 

    // Free memory associated with the image 
    imagedestroy($im); 

?> 

In einem einfachen Beispiel, können Sie diese Tracking rufen Sie die folgende Beispiel-URL in einer E-Mail mit oder anderen Seite:

<img src="http://example.com/pixel.php?s=value1&b=value2&c=value3"> 



Verwendung von Variablen: vereinfachend

Innerhalb Ihres pixel.php Sie können dann analysieren und interpretieren alle $_GET Variablen, die es innerhalb der Image-Tag übergeben werden,:

if (isset($_GET['a'])) { 
    // (Do|log) act on a 
} 
if (isset($_GET['b'])) { 
    // (Do|log) act on b 
} 
if (isset($_GET['c'])) { 
    // (Do|log) act on c 
} 

Nehmen und wiederholen, wie Sie benötigen, aber Sie kann ziemlich ausgeklügelt sein über das, was Sie tun, und vor allem, weil Sie Zugriff auf eine Menge Informationen über den Benutzer haben, indem Sie vars auf der $_GET Zeichenfolge setzen können.

Ein anwendbares Beispiel könnte sein:

<img src="http://example.com/pixel.php?userid=98798&campaign=302&last=8"> 



mehr Verfolgung als nur _GET Variablen $:

Sie können auch viel mehr Informationen mit Hilfe von PHP, wie abholen:

// Server variables 
$ip = $_SERVER['REMOTE_ADDR']; 
$referer = $_SERVER['HTTP_REFERER']; 
$useragent = $_SERVER['HTTP_USER_AGENT']; 
$browser = get_browser(null, true); 
etc... 

und dann vielleicht in at einfügen in Ihrer Datenbank Regal Tabelle:

$sql = "INSERT INTO campaign_tracking 
     ('when','campaign','last','ip','useragent') 
     VALUES 
     (NOW(),'$campaign','$last','$ip','$useragent')"; 

Dies ist eine (die) grundlegende Methode weit verbreitet für die Verfolgung von E-Mail-Marketing-Kampagnen und speziell in PHP, aber das gleiche Verfahren ist anwendbar mit anderen Skript/Programmiersprachen und Bibliotheken - und für andere Zwecke auch.

Weitere und nützliche Informationen über die GD:

+0

Aber wie greife ich auf die URL zu, auf die der Pixel mit dieser Art von Implementierung feuert? Ich kann mir nur vorstellen, dass ich das Dokument.URL als Abfragezeichenfolge-Parameter für das Pixel hinzufüge, aber ich befürchte, dass es die Pixel-URL zu lang machen würde. Nein? –

+2

Das ist zu teuer ??? Sie müssen das Bild die ganze Zeit generieren – Baba

+0

Ich kann nicht sehen, es über JS aufrufen würde Sie viele Probleme verursachen, es sei denn, Ihre URL-String war lächerlich lang !? Sie können ein langes '$ _GET' ohne Probleme aufrufen, aber es ist ein subjektives Problem. Es hängt davon ab, was du tust. @Baba Während Sie das Bild im laufenden Betrieb erstellen müssen, habe ich noch nie Probleme damit gesehen @ ca. 1 Mio. (Millionen) Anfragen pro Tag in einer E-Mail enthalten !! Dies ist effektiv, wie E-Mail-Tracking-Systeme arbeiten. – nickhar

42

Hier ist eine weitere PHP Implementierung eines Tracking-Pixel, aus dem Open Web Analytics Projekt, das im Grunde genommen zu sein, versucht, PHP-Klon von Google Analytics.

Es ein Bild 1x1 transparent GIF zurück (ohne PHP Bildbibliothek mit!), Mit einem No-Cache-Header (wichtig für eine genaue Überwachung) und spült den Ausgang, so dass Sie die ohne Blockierung der Analytik Verarbeitung weiter HTTP-Antwort (Leistung) Es scheint eine ziemlich fortgeschrittene Implementierung zu sein, die es wert ist, sie auszuprobieren.

<?php 
ignore_user_abort(true); 

// turn off gzip compression 
if (function_exists('apache_setenv')) { 
    apache_setenv('no-gzip', 1); 
} 

ini_set('zlib.output_compression', 0); 

// turn on output buffering if necessary 
if (ob_get_level() == 0) { 
    ob_start(); 
} 

// removing any content encoding like gzip etc. 
header('Content-encoding: none', true); 

//check to ses if request is a POST 
if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // the GIF should not be POSTed to, so do nothing... 
    echo ' '; 
} else { 
    // return 1x1 pixel transparent gif 
    header("Content-type: image/gif"); 
    // needed to avoid cache time on browser side 
    header("Content-Length: 42"); 
    header("Cache-Control: private, no-cache, no-cache=Set-Cookie, proxy-revalidate"); 
    header("Expires: Wed, 11 Jan 2000 12:59:00 GMT"); 
    header("Last-Modified: Wed, 11 Jan 2006 12:59:00 GMT"); 
    header("Pragma: no-cache"); 

    echo sprintf('%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%',71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59);  
} 

// flush all output buffers. No reason to make the user wait for OWA. 
ob_flush(); 
flush(); 
ob_end_flush(); 

// DO ANALYTICS TRACKING HERE 
+4

+1 Große (und anspruchsvolle) Alternative ohne GD. – nickhar

+0

Dies funktioniert nicht für mich ... gibt ein gebrochenes Bild :( – nights

+4

Echo base64_decode (‚R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEA‘) auch anstelle des sprintf arbeitet, kürzere Bit. – MSpreij

8

Ausgabe 1px x 1px auf diese Weise:

header('Content-type: image/png'); 
echo gzinflate(base64_decode('6wzwc+flkuJiYGDg9fRwCQLSjCDMwQQkJ5QH3wNSbCVBfsEMYJC3jH0ikOLxdHEMqZiTnJCQAOSxMDB+E7cIBcl7uvq5rHNKaAIA')); 
+0

kann es funktioniert –

+1

? Jemand bestätigen @JimThio Für mich geht das –

0

Hier ist ein extrem vereinfachtes Tracking-Pixel in PHP geschrieben.

How a Tracking Pixel Works

Ein Tracking-Pixel ist wie die primitivsten Leuchtfeuer möglich, und es funktioniert, indem eine Tatsache, von Web-Seiten zu nutzen: Bilder eine separate Anfrage von der Seite sind.

Wenn Sie Ihren JS-Code bereits auf der Seite einer anderen Person ausführen können, sollten Sie die Daten einfach an Ihren Server senden. Sie müssen kein winziges Pixel anzeigen, das nur die gleichen Daten erhält.