2012-10-26 10 views
29

Sto provando a creare un pixel che traccia l'URL corrente in cui si trova l'utente quando visita. Posso usare JS (preferito) o un pixel dell'immagine 1x1. Con JS presumo che avrei bisogno di eseguire una richiesta AJAX su uno script PHP per acquisire le informazioni di cui ho bisogno e con un pixel dell'immagine ho problemi a ottenere l'URL corrente.Sviluppo di un pixel di tracciamento

Ho anche pensato all'URL che codifica l'URL corrente con JS e posiziono dinamicamente il pixel dell'immagine con l'URL corrente codificato come stringa di query a uno script PHP, ma che posso arrivare a essere molto lungo.

Se devo andare al percorso AJAX, quale libreria AJAX posso usare? JQuery è troppo gonfio per questo scopo.

Altre idee?

+2

Non hai bisogno di ajax affatto come un'immagine pixel generata in PHP sarebbe solo inclusa e richiesta come immagine nel tuo codice HTML. – nickhar

+2

usa solo il log del server o google analytics. –

+0

@Dagon Questo è per un'applicazione personalizzata che ho bisogno di catturare diverse informazioni per. –

risposta

47

È possibile scrivere uno script che crea e restituisce un'immagine .gif, .jpeg o .png usando PHP per monitoraggio scopi utilizzando il GD library (che è spesso distribuito con PHP nelle versioni moderne). Se non hai accesso a GD, puoi sempre ricompilare PHP con GD abilitato.

Esempio:

pixel.php (commentato ai fini della spiegazione):

<?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 un semplice esempio, è possibile chiamare questo rilevamento utilizzando il seguente URL di esempio in una e-mail o altro pagina:

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



variabili utilizzando:

All'interno del vostro pixel.php si può quindi analizzare e interpretare eventuali $_GET variabili che vengono passate ad esso all'interno del tag immagine, semplicisticamente:

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 
} 

Apply e ripetere come è necessario, ma si può essere abbastanza sofisticato su quello che fai e soprattutto come hai accesso a un sacco di informazioni sull'utente attraverso la possibilità di impostare vars sulla stringa $_GET.

Un esempio più pertinente potrebbe essere:

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



monitoraggio più che soli $ _GET variabili:

È anche possibile raccogliere molte più informazioni utilizzando PHP, come ad esempio:

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

e quindi inserire in svinatura tabella nel database:

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

Questa è una (la) metodo di base ampiamente utilizzato per il monitoraggio di campagne di email marketing e in particolare in PHP, ma lo stesso metodo è applicabile utilizzando altri/linguaggi e librerie di programmazione di scripting - e per anche altri scopi.

Ulteriori e informazioni utili su GD:

+0

Ma come faccio ad accedere all'URL con cui il pixel si attiva con questo tipo di implementazione? L'unico modo che posso pensare è di aggiungere il documento .URL come parametro di stringa di query al pixel, ma il mio timore è che renderebbe l'URL dei pixel troppo lungo. No? –

+2

Vale a dire costoso ??? Devi generare sempre l'immagine – Baba

+0

Non riesco a vedere la chiamata tramite JS ti causerebbe molti problemi, a meno che la tua stringa di URL fosse ridicola in lunghezza !? Puoi chiamare un lungo '$ _GET' senza problemi, ma è un problema soggettivo. Dipende da cosa stai facendo. @Baba Mentre devi generare l'immagine al volo, non ho mai visto alcun problema con esso @ circa 1 milione di richieste al giorno incluse in un'email !! Questo è, in effetti, il modo in cui funzionano i sistemi di tracciamento delle e-mail. – nickhar

42

Ecco un'altra implementazione PHP di un pixel di tracciamento, dal progetto Open Web Analytics, che tenta di essere fondamentalmente un Clone PHP di Google Analytics.

Esso restituisce 1x1 un'immagine GIF trasparente (senza utilizzare una libreria di immagini PHP!), Con un colpo di testa no-cache (importante per una maggiore precisione), e vampate l'uscita in modo da poter continuare a elaborare le analisi senza bloccare il Risposta HTTP (prestazioni). Sembra un'implementazione piuttosto avanzata, che vale la pena provare.

<?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 Ottima (e sofisticata) alternativa senza GD. – nickhar

+0

Questo non funziona per me ... emette un'immagine rotto :( – nights

+4

eco base64_decode ('R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEA') funziona anche al posto del sprintf, po 'più breve. – MSpreij

8

uscita 1 x 1 pixel in questo modo:

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

qualcuno può confermare che funziona? –

+1

@JimThio per me funziona –

0

Ecco un pixel di monitoraggio estremamente semplificato scritto in PHP.

How a Tracking Pixel Works

Un pixel di tracciamento è come il faro più primitivo possibile, e funziona sfruttando un fatto di pagine web: le immagini sono una richiesta separata dalla pagina.

Se è già possibile eseguire il codice JS sulla pagina di qualcun altro, è necessario POSTARE i dati sul server. Non è necessario visualizzare un pixel minuscolo che otterrà solo lo stesso tipo di dati.

Problemi correlati