Monitorare un link con php
Scritto da Erriko in Php il 19 maggio 2009
Intendiamo controllare un link presente sul nostro sito o il collegamento ad un file da scaricare? Vogliamo sapere chi e quando lo ha cliccato?
Vogliamo capire se un sito funziona, se i contenuti sono interessanti o vedere se e quanti utenti abbiamo portato ad un servizio con il nostro link?
Con php è possibile, e vi spiego come:
Ipotizziamo di voler controllare quanti utenti cliccano sul link di questo tipo:
<a href="http://www.sitochevogliamo.com">Entra nel sito per saperne di più</a>
oppure
<a href="http://www.tuosito.it/guida_pdf.zip">Scarica la mia guida completa e illustrata</a>
Bene, per riuscire in questo intento dovremo realizzare:
- una tabella nel database MySQL registrare i risultati.
- un file active_link.php adatto a catturare le informazioni.
Definiamo la tabella
Nella tabella andremo a memorizzare le carateristiche dell’utente che richiede il documento.
Eseguiamo il seguente codice con l’ausilio del gestore del database (generalmente, trattandosi di mysql, phpmyadmin).
CREATE TABLE `site_trace` ( `id` int(11) NOT NULL auto_increment, `nome` varchar(32) NOT NULL default '', `ip` varchar(50) NOT NULL default '', `tempo` datetime NOT NULL default '0000-00-00 00:00:00', `description` varchar(120) NOT NULL default '', PRIMARY KEY (`id`) ) ;
All’interno avremo, oltre alla chiave primaria:
- nome della pagina o del documento richiesto.
- l’indirizzo IP dell’utente (così da capire se lo stesso utente ha preso più documenti).
- quanto tempo l’utente è rimasto nella pagina e il momento della visita.
- altre caratteristiche che intendiamo tracciare.
Realizziamo il file utile a catturare i dati
Creiamo un file con il nome active_link con estensione php, che sarà in grado di catturare le informazioni dell’utente che ha fatto richiesta del documento.
Il codice da inserire in tale file è:
// interazione con il database
$conn = mysql_connect('tuo_host','tuo_nome','tuo_password') or die("Errore nella connessione MySQL: " . mysql_error());
mysql_select_db('tuo_database',$conn) or die("Errore nella selezione del database: " . mysql_error());
$oggi=date("Y-m-d H:i:s");
$query = "INSERT INTO site_trace VALUES(0,";
$query.= "'".$_REQUEST['link']."',";
$query.= "'".$_SERVER['REMOTE_ADDR']."',";
$query.= "'".$oggi."',";
$query.= "'".$_SERVER['HTTP_USER_AGENT']."')";
mysql_query($query,$conn) or die("Errore nella query:" . mysql_error());
// dopo aver memorizzato i dati nella tabella invio una e-mail di avviso
$oggetto="Link attivato per ".$_REQUEST['link'].": ".$oggi;
$contenuto.= "Il sito/documento ".$_REQUEST['link']." è stato visitato.<br>";
$contenuto.= "Indirizzo IP: ".$_SERVER['REMOTE_ADDR']."<br>";
$contenuto.= "User Agent: ".$_SERVER['HTTP_USER_AGENT']."<br>";
$contenuto.= "Data/orario: ".$oggi."<br>";
$mailheader .= "From: indirizzo_posta_sito";
$mailheader .= "Bcc: indirizzo_posta2";
$mailheader .= "Content-Type: text/html; charset="iso-8859-1" ";
$resultmail = @mail("indirizzo_posta_sito",$oggetto,$contenuto,$mailheader);
// carico la pagina richiesta dall'utente
header("location: http://".$_REQUEST['link']);
exit;
}
Ovviamente questo codice va inserito tra <?php e ?> altrimenti non verrà riconosciuto come codice php e quindi non sarà eseguito.
Trasformare i link in link “monitorati”
Facendo sempre riferimento ai link d’esempio mensionati all’inizio dovremo modificare il link contenuto tra le virgolette dell’href in questo modo:
<a href="active_link.php?link=www.sitochevogliamo.com">Entra nel sito per saperne di più</a>
oppure
<a href="active_link.php?link=www.tuosito.it/guida_pdf.zip">Scarica la mia guida completa e illustrata</a>
Come si può notare in questa maniera l’utente, prima di andare alla destinazione del link, passera per active_link.php che catturerà le informazioni desiderate.
Nel nostro esempio cattureremo solamente:
- $_SERVER['REMOTE_ADDR'] contiene l’indirizzo IP di un utente.
- $_SERVER['HTTP_USER_AGENT'] contiene le informazioni dell’utente.
Ma ovviamente è possibile modificare il codice in maniera tale da catturare più informazioni. A questo proposito può tornare utile questa mia precedente guida.



Grazie!